pax_global_header00006660000000000000000000000064147554570210014524gustar00rootroot0000000000000052 comment=209d8440efb41e15162e6c6556d974bc37b73bdc onionshare-2.6.3/000077500000000000000000000000001475545702100137015ustar00rootroot00000000000000onionshare-2.6.3/.github/000077500000000000000000000000001475545702100152415ustar00rootroot00000000000000onionshare-2.6.3/.github/CODEOWNERS000066400000000000000000000001741475545702100166360ustar00rootroot00000000000000* @micahflee # localization /share/locale/ @emmapeel2 # tests /tests/ @mig5 /tests_gui_local/ @mig5 /tests_gui_tor/ @mig5 onionshare-2.6.3/.github/ISSUE_TEMPLATE/000077500000000000000000000000001475545702100174245ustar00rootroot00000000000000onionshare-2.6.3/.github/ISSUE_TEMPLATE/bug.md000066400000000000000000000016311475545702100205240ustar00rootroot00000000000000--- name: Bug report about: Use this form to submit a bug report about something not working in OnionShare --- - [ ] I have already searched the issue queue for my error message or symptom ## Details about your operating system Operating system: (e.g. Linux / Windows) Version/distribution: (e.g. Ubuntu 22.04 / Debian Bookworm / macOS Ventura, etc) Version of Onionshare: (e.g. 2.6.2) ## How did you install OnionShare - [ ] Native Mac/Windows package - [ ] Flatpak - [ ] Snap - [ ] Pip (command line) - [ ] Via my Linux distribution's package manager - [ ] From source ## What is the problem Please replace this text with the problem you experienced. Please try to include logs if safe to do so (run OnionShare cli or desktop with -v from a terminal). Make sure to omit any onion addresses or 'Private Key'/passwords if they would deanonymize you or your recipient! ## Anything else you'd like to tell us? onionshare-2.6.3/.github/ISSUE_TEMPLATE/feature.md000066400000000000000000000011461475545702100214030ustar00rootroot00000000000000--- name: Feature request about: Use this form to submit a suggestion about a feature you think OnionShare should have. --- - [ ] I have already searched the issue queue for my feature request ## Your feature idea Please write it here. Please note that we are not looking to add the following features: * Ability to host a dynamic website requiring databases or anything not considered 'static' * Database backends to store persistent information about use of Share or Receive mode, e.g statistics * Chat, voice or other instant messaging services * High availability for Onion Services (e.g OnionBalance) onionshare-2.6.3/.github/ISSUE_TEMPLATE/question.md000066400000000000000000000002431475545702100216140ustar00rootroot00000000000000--- name: Question or support about: Use this form if it is neither a bug nor a feature, but you just had a question. --- ## Your uestion Please write it here. onionshare-2.6.3/.github/workflows/000077500000000000000000000000001475545702100172765ustar00rootroot00000000000000onionshare-2.6.3/.github/workflows/build.yml000066400000000000000000000235751475545702100211340ustar00rootroot00000000000000name: Build run-name: Build Windows (x86_64), macOS (Intel), Snap, and Flatpak 🚀 on: push: branches: - main pull_request: branches: - main jobs: build-win64: runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: Install python uses: actions/setup-python@v5 with: python-version: "3.12.8" - name: Install poetry run: C:\hostedtoolcache\windows\Python\3.12.8\x64\python -m pip install poetry - name: Restore cache - poetry uses: actions/cache@v4 with: path: ~\AppData\Local\pypoetry\Cache\virtualenvs key: ${{ runner.os }}-win64-poetry-${{ hashFiles('desktop/poetry.lock') }} - name: Install poetry dependencies run: | cd desktop C:\hostedtoolcache\windows\Python\3.12.8\x64\Scripts\poetry install C:\hostedtoolcache\windows\Python\3.12.8\x64\Scripts\poetry env list --full-path - name: Restore cache - tor uses: actions/cache@v4 with: path: desktop\build\tor key: ${{ runner.os }}-win64-tor-${{ hashFiles('desktop/scripts/get-tor.py') }} - name: Get tor binaries from Tor Browser (64-bit) run: cd desktop && C:\hostedtoolcache\windows\Python\3.12.8\x64\Scripts\poetry run python .\scripts\get-tor.py win64 - name: Install Go >=1.23.5 uses: actions/setup-go@v5 with: go-version: ">=1.23.5" cache: false - run: go version - name: Restore cache - obfs4proxy uses: actions/cache@v4 with: path: desktop\onionshare\resources\tor\obfs4proxy.exe key: ${{ runner.os }}-win64-obfs4proxy-${{ hashFiles('desktop/scripts/build-pt-obfs4proxy.ps1') }} - name: Build obfs4proxy shell: pwsh run: | if ((Test-Path -Path 'desktop\onionshare\resources\tor\obfs4proxy.exe') -eq $True) { Write-Output "obfs4proxy already built" } else { cd desktop .\scripts\build-pt-obfs4proxy.ps1 } - name: Restore cache - snowflake uses: actions/cache@v4 with: path: desktop\onionshare\resources\tor\snowflake-client.exe key: ${{ runner.os }}-win64-snowflake-${{ hashFiles('desktop/scripts/build-pt-snowflake.ps1') }} - name: Build snowflake shell: pwsh run: | if ((Test-Path -Path 'desktop\onionshare\resources\tor\snowflake-client.exe') -eq $True) { Write-Output "snowflake already built" } else { cd desktop .\scripts\build-pt-snowflake.ps1 } - name: Restore cache - meek uses: actions/cache@v4 with: path: desktop\onionshare\resources\tor\meek-client.exe key: ${{ runner.os }}-win64-meek-${{ hashFiles('desktop/scripts/build-pt-meek.ps1') }} - name: Build meek shell: pwsh run: | if ((Test-Path -Path 'desktop\onionshare\resources\tor\meek-client.exe') -eq $True) { Write-Output "meek already built" } else { cd desktop .\scripts\build-pt-meek.ps1 } - name: Build OnionShare run: | cd desktop C:\hostedtoolcache\windows\Python\3.12.8\x64\Scripts\poetry run python .\setup-freeze.py build C:\hostedtoolcache\windows\Python\3.12.8\x64\Scripts\poetry run python .\scripts\build-windows.py cleanup-build - name: Compress shell: pwsh run: | mv desktop\build\exe.win-amd64-3.12\ ~\onionshare-win64 Compress-Archive -LiteralPath ~\onionshare-win64 -DestinationPath ~\onionshare-win64.zip - uses: actions/upload-artifact@v4 with: name: win64-build path: ~\onionshare-win64.zip build-mac-intel: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Install Python 3.12.8 (universal2) run: | curl -L https://www.python.org/ftp/python/3.12.8/python-3.12.8-macos11.pkg --output ~/Downloads/python.pkg cd ~/Downloads && echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbff python.pkg" | shasum -a 256 --check && sudo installer -pkg python.pkg -target / - name: Install poetry run: | curl -sSL https://install.python-poetry.org | python3 - - name: Restore cache - poetry uses: actions/cache@v4 with: path: ~/Library/Caches/pypoetry/virtualenvs key: ${{ runner.os }}-macos-poetry-${{ hashFiles('desktop/poetry.lock') }} - name: Install poetry dependencies run: | cd desktop ~/Library/Application\ Support/pypoetry/venv/bin/poetry install - name: Restore cache - tor uses: actions/cache@v4 with: path: desktop/build/tor key: ${{ runner.os }}-macos-tor-${{ hashFiles('desktop/scripts/get-tor.py') }} - name: Get tor binaries from Tor Browser run: | cd desktop ~/Library/Application\ Support/pypoetry/venv/bin/poetry run python ./scripts/get-tor.py macos - name: Install Go >=1.23.5 uses: actions/setup-go@v5 with: go-version: ">=1.23.5" cache: false - run: go version - name: Restore cache - obfs4proxy uses: actions/cache@v4 with: path: desktop/onionshare/resources/tor/obfs4proxy key: ${{ runner.os }}-macos-obfs4proxy-${{ hashFiles('desktop/scripts/build-pt-obfs4proxy.sh') }} - name: Build obfs4proxy run: | if [[ -f "desktop/onionshare/resources/tor/obfs4proxy" ]]; then echo "obfs4proxy already built" else cd desktop ./scripts/build-pt-obfs4proxy.sh fi - name: Restore cache - snowflake uses: actions/cache@v4 with: path: desktop/onionshare/resources/tor/snowflake-client key: ${{ runner.os }}-macos-snowflake-${{ hashFiles('desktop/scripts/build-pt-snowflake.sh') }} - name: Build snowflake run: | if [[ -f "desktop/onionshare/resources/tor/snowflake-client" ]]; then echo "snowflake already built" else cd desktop ./scripts/build-pt-snowflake.sh fi - name: Restore cache - meek uses: actions/cache@v4 with: path: desktop/onionshare/resources/tor/meek-client key: ${{ runner.os }}-macos-meek-${{ hashFiles('desktop/scripts/build-pt-meek.sh') }} - name: Build meek run: | if [[ -f "desktop/onionshare/resources/tor/meek-client" ]]; then echo "meek already built" else cd desktop ./scripts/build-pt-meek.sh fi - name: Install cx_Freeze/PySide6 build dependencies run: | brew install libiodbc cd ~/Downloads curl -O -L https://github.com/PostgresApp/PostgresApp/releases/download/v2.6.5/Postgres-2.6.5-14.dmg hdiutil attach Postgres-2.6.5-14.dmg cp -r /Volumes/Postgres-2.6.5-14/Postgres.app /Applications/ hdiutil detach /Volumes/Postgres-2.6.5-14 - name: Build OnionShare run: | cd desktop ~/Library/Application\ Support/pypoetry/venv/bin/poetry run python ./setup-freeze.py bdist_mac ~/Library/Application\ Support/pypoetry/venv/bin/poetry run python ./scripts/build-macos.py cleanup-build - name: Compress run: | cd desktop/build tar -czvf ~/onionshare-macos-intel.tar.gz OnionShare.app - uses: actions/upload-artifact@v4 with: name: mac-intel-build path: ~/onionshare-macos-intel.tar.gz build-flatpak: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup run: | sudo apt update sudo apt install -y flatpak flatpak-builder flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo - name: Restore cache - .flatpak-builder uses: actions/cache@v4 with: path: flatpak/.flatpak-builder key: flatpak-.flatpak-builder-${{ hashFiles('flatpak/org.onionshare.OnionShare.yaml') }} - name: Restore cache - build uses: actions/cache@v4 with: path: flatpak/build key: flatpak-build-${{ hashFiles('flatpak/org.onionshare.OnionShare.yaml') }} - name: Flatpak build run: | cd flatpak flatpak-builder build --force-clean --verbose --install-deps-from=flathub --install --user org.onionshare.OnionShare.yaml flatpak build-bundle ~/.local/share/flatpak/repo ~/OnionShare.flatpak org.onionshare.OnionShare --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo - uses: actions/upload-artifact@v4 with: name: flatpak-build path: ~/OnionShare.flatpak build-snap: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Restore cache - lxd uses: actions/cache@v4 with: path: ~/lxd_cache.tar.gz key: snap-lxd-${{ hashFiles('snap/snapcraft.yaml') }} - name: Decompress cached content to lxd directory run: | if [ -f "~/lxd_cache.tar.gz" ]; then sudo tar -xzf ~/lxd_cache.tar.gz -C / fi - name: Install dependencies run: | sudo lxd init --auto sudo lxc storage list sudo snap install snapcraft --classic sudo ufw disable - name: Build snap run: sudo snapcraft -v - name: Compress lxd directory and set proper permissions run: | sudo tar -czf ~/lxd_cache.tar.gz /var/snap/lxd/common/lxd/storage-pools/default sudo chown $USER:$USER ~/lxd_cache.tar.gz - uses: actions/upload-artifact@v4 with: name: snapcraft-build path: onionshare_*.snap onionshare-2.6.3/.github/workflows/codeql-analysis.yml000066400000000000000000000043761475545702100231230ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: - main pull_request: branches: - main schedule: - cron: '22 11 * * 5' jobs: analyze: name: Analyze runs-on: ubuntu-latest strategy: fail-fast: false matrix: language: [ 'python' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - name: Checkout repository uses: actions/checkout@v2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v1 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 onionshare-2.6.3/.github/workflows/tests.yml000066400000000000000000000043171475545702100211700ustar00rootroot00000000000000name: Run Tests run-name: Run tests on: push: branches: - main pull_request: branches: - main jobs: test-cli: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install dependencies run: | sudo apt-get update sudo apt-get -y install tor obfs4proxy pip install --upgrade pip poetry - uses: actions/cache@v3 with: path: ~/.cache/pypoetry/virtualenvs key: ${{ runner.os }}-cli-poetry-${{ hashFiles('cli/poetry.lock') }} - run: cd cli && poetry install - run: | cd cli poetry run pytest -v ./tests poetry run onionshare-cli --local-only ./tests --auto-stop-timer 2 --qr --verbose poetry run onionshare-cli --local-only ./tests --auto-start-timer 2 --auto-stop-timer 2 --qr --verbose poetry run onionshare-cli --local-only --receive --auto-stop-timer 2 --qr --verbose poetry run onionshare-cli --local-only --website ../docs --auto-stop-timer 2 --qr --verbose poetry run onionshare-cli --local-only --chat --auto-stop-timer 5 --qr --verbose test-desktop: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y tor obfs4proxy gcc python3-dev python3-pyside2.qtcore python3-pyside2.qtwidgets python3-pyside2.qtgui sudo apt-get install -y xvfb x11-utils libxkbcommon-x11-0 libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev libxcb-render-util0 libxcb-icccm4 libxcb-keysyms1 libxcb-image0 pip install --upgrade pip poetry - uses: actions/cache@v3 with: path: ~/.cache/pypoetry/virtualenvs key: ${{ runner.os }}-desktop-poetry-${{ hashFiles('desktop/poetry.lock') }} - run: cd desktop && poetry install - run: | cd desktop QT_QPA_PLATFORM=offscreen QT_DEBUG_PLUGINS=1 xvfb-run poetry run pytest -v ./tests/test_gui_*.py onionshare-2.6.3/.gitignore000066400000000000000000000011211475545702100156640ustar00rootroot00000000000000__pycache__ *.py[cod] # C extensions *.so # Packages *.egg *.egg-info *.eggs dist deb_dist build _build eggs parts var sdist develop-eggs .installed.cfg MANIFEST env onionshare-*.tar.gz onionshare_*.snap .flatpak-builder OnionShare.flatpak # Installer logs pip-log.txt # Unit test / coverage reports .coverage .tox nosetests.xml .cache .pytest_cache # Translations *.mo # Mr Developer .mr.developer.cfg .project .pydevproject # vim *.swp # tags ctags tags # OSX .DS_Store # virtualenv venv # other .vscode .python-version onionshare.dist-info desktop/onionshare/resources/tor TODO* onionshare-2.6.3/CHANGELOG.md000066400000000000000000000370701475545702100155210ustar00rootroot00000000000000# OnionShare Changelog ## 2.6.3 * Feature: It is now possible to view what URLs are visited in Share/Website mode using the CLI tool, with `--log-filenames`. * Feature: It is now possible to automatically start a saved persistent onion tab, once OnionShare itself starts and once Tor is connected. * Bug fix: It is now once again possible to request bridges and use meek as a Pluggable Transport. * Bug fix: Fixed a fatal error with Censorship Circumvention when no bridges are returned. * Bug fix: Fixed an issue with lack of gevent with SocketIO on systems that don't have it. * Bug fix: Fixed a thread-related race condition segfault with the CLI tool on shutdown. * Bug fix: Fixed an issue with the 'auto-stop timer' when the CLI tool is being used in 'Share mode' and someone has visited the share at least once. Desktop was unaffected, as were all other modes. * Locales: Gaeilge, Slovenčina and Tamil languages introduced, and various other translations in existing languages added or improved (thanks to the translators!) * Documentation: Added examples of using a systemd unit file for persistent onions, and various other clarifications. * Documentation: Documented all the config file parameters and what they mean, as well as that for persistent onion json files. * Packaging: Built the snap with a cleanup step in such a way that it should work on Ubuntu 24.04 and higher. Unfortunately, we have to drop support for armhf for now, as there are no PySide6 packages available on Pypi to install for that architecture. However, ARM64 is supported. * Packaging: Fixed ARM64 packaging for Flatpak. * Packaging: Many internal packaging improvements that make it easier for us to release snap and flatpak. * Miscellaneous: Many dependency updates to Python libraries, Tor, Snowflake * Miscellaneous: Various minor bug fixes/warning messages resolved, and minor changes to some wording for the 'Save this tab' option to make it clearer that this means 'persistent onion address'. * Miscellaneous: Nicer and more intuitive icons with better dark mode support. ## 2.6.2 * Security fix: Removes newlines from History item path * Security fix: Set a maximum length of 524288 characters for text messages in Receive mode * Security fix: Allows only specific ASCII characters for usernames and removes control characters * Security fix: Forcefully disconnect user from chat on `disconnect` event * Security fix: Handle username validation excpeptions to prevent silent joining ## 2.6.1 * Release updates: Automate builds with CI, make just 64-bit Windows release, make a single universal2 release for both Intel and Apple Silicon macOS * Upgrade dependencies, including Tor, meek, and snowflake * Bug fix: Restore the primary_action mode settings in a tab after OnionShare reconnects to Tor * Bug fix: Fix issue with auto-connecting to Tor with persistent tabs open * Bug fix: Fix packaging issue where Windows version of OnionShare conflicts with Windows version of Dangerzone * Bug fix: Fix 'Use a bridge' checkbox state change * Bug fix: Raise error from waitress if not shutdown ## 2.6 * Major feature: a new 'Quickstart' screen, which enables toggling on or off an animated automatic connection to Tor. This allows configuring network settings prior to automatic connection. * Major feature: Censorship circumvention. Use new features in the upstream Tor API to try to automatically obtain bridges depending on the user's location. * New feature: automatically fetch the built-in bridges from the upstream Tor API rather than hardcode them in each release of OnionShare. * New feature: keyboard shortcuts to access various modes and menus, and accessibility hints * Bug fix: Temporary Directory for serving the OnionShare web pages was broken on Windows * Packaging: Packaging is more automated, and Linux Snapcraft releases are available for amd64, arm64, and armhf * Miscellaneous: Many dependency updates and web page theming improvements ## 2.5 * Security fix: Sanitize the path parameter in History item widget to be plain text * Security fix: Use microseconds in Receive mode directory creation to avoid potential DoS * Security fix: Several hardening improvements for session and username management in Chat mode, to prevent impersonation and other issues * Major feature: Obtain bridges from Moat / BridgeDB (over a domain-fronted Meek client) * Major feature: Snowflake bridge support * New feature: Tor connection settings, as well as general settings, are now Tabs rather than dialogs * New feature: User can customize the Content-Security-Policy header in Website mode * New feature: Built-in bridges are automatically updated from Tor's API when the user has chosen to use them * Switch to using our `stem` fork called `cepa`, which is now published on Pypi so we can build it in releases * Various bug fixes ## 2.4 * Major feature: Private keys (v3 onion client authentication) replaces passwords and HTTP basic auth * Updated Tor to 0.4.6.7 on all platforms * Various bug fixes ## 2.3.3 * New feature: Setting for light or dark theme * Updated Tor to 0.4.6.7 for Linux, 0.4.5.10 for Windows and macOS * Various bug fixes ## 2.3.2 * New feature: Custom titles can be set for OnionShare's various modes * New feature: Receive mode supports notification webhooks * New feature: Receive mode supports submitting messages as well as files * New feature: New ASCII art banner and prettier verbose output * New feature: Partial support for range requests (pausing and resuming in HTTP) * Updated Tor to 0.4.5.7 * Updated built-in obfs4 bridges * Various bug fixes ## 2.3.1 * Bugfix: Fix chat mode * Bugfix: Fix --persistent in onionshare-cli * Bugfix: Fix checking for updates in Windows and macOS ## 2.3 * Major new feature: Multiple tabs, including better support for persistent services, faster Tor connections * New feature: Chat anonymously mode * New feature: All new design * New feature: Ability to display QR codes of OnionShare addresses * New feature: Web apps have responsive design and look better on mobile * New feature: Flatpak and Snapcraft packaging for Linux * Several bug fixes ## 2.2 * New feature: Website mode, which allows publishing a static HTML website as an onion service * Allow individual files to be viewed or downloaded in Share mode, including the ability to browse into subdirectories and use breadcrumbs to navigate back * Show a counter when individual files or pages are viewed * Better History items including colors and status codes to differentiate between successful and failed requests * Swap out the random /slug suffix for HTTP basic authentication (when in non-public mode) * Hide the Tor connection settings if the ONIONSHARE_HIDE_TOR_SETTINGS environment variable is set (Tails compatibility) * Remove the NoScript XSS warning in Receive Mode now that the NoScript/Tor Browser bug is fixed. The ajax upload method still exists when javascript is enabled. * Better support for DragonFly BSD * Updated various dependencies, including Flask, Werkzeug, urllib3, requests, and PyQt5 * Updated Tor to 0.4.1.5 * Other minor bug fixes * New translations: * Arabic (العربية) * Dutch (Nederlands) * Persian (فارسی) * Romanian (Română) * Serbian latin (Srpska (latinica)) * Removed translations with fewer than 90% of strings translated: * Finnish (Suomi) ## 2.1 * New feature: Auto-start timer, which allows scheduling when the server starts * Renamed CLI argument --debug to --verbose * Make Tor connection timeout configurable as a CLI argument * Updated various dependencies, including fixing third-party security issues in urllib3, Jinja2, and jQuery * Updated Tor to 0.3.5.8 * New translations: * Traditional Chinese (正體中文 (繁體)), * Simplified Chinese (中文 (简体)) * Finnish (Suomi) * German (Deutsch) * Icelandic (Íslenska) * Irish (Gaeilge) * Norwegian Bokmål (Norsk bokmål) * Polish (Polski) * Portuguese Portugal (Português (Portugal)) * Telugu (తెలుగు) * Turkish (Türkçe) * Ukrainian (Українська) * Removed translations with fewer than 90% of strings translated: * Bengali (বাংলা) * Persian (فارسی) ## 2.0 * New feature: Receiver mode allows you to receive files with OnionShare, instead of only sending files * New feature: Support for next generation onion services * New feature: macOS sandbox is enabled * New feature: Public mode feature, for public uses of OnionShare, which when enabled turns off slugs in the URL and removes the limit on how many 404 requests can be made * New feature: If you're sharing a single file, don't zip it up * New feature: Full support for meek_lite (Azure) bridges * New feature: Allow selecting your language from a dropdown * New translations: Bengali (বাংলা), Catalan (Català), Danish (Dansk), French (Français), Greek (Ελληνικά), Italian (Italiano), Japanese (日本語), Persian (فارسی), Portuguese Brazil (Português Brasil), Russian (Русский), Spanish (Español), Swedish (Svenska) * Several bugfixes * Invisible to users, this version includes some major refactoring of the codebase, and a robust set of unit tests which makes OnionShare easier to maintain going forward ## 1.3.2 * Bugfix: In debug mode, stop saving flask debug log in /tmp, where all users can access it ## 1.3.1 * Updated Tor to 0.2.3.10 * Windows and Mac binaries are now distributed with licenses for Tor and obfs4 ## 1.3 * Major UI redesign, introducing many UX improvements * Client-side web interface redesigned * New feature: Support for meek_lite pluggable transports (Amazon and Azure) - not yet ready for Windows or macOS, sorry * New feature: Support for custom obfs4 and meek_lite bridges (again, meek_lite not available on Windows/macOS yet) * New feature: Ability to cancel share before it starts * Bugfix: The UpdateChecker no longer blocks the UI when checking * Bugfix: Simultaneous downloads (broken in 1.2) * Updated Tor to 0.2.3.9 * Improved support for BSD * Updated French and Danish translations * Minor build script and build documentation fixes * Flake8 tests added ## 1.2 * New feature: Support for Tor bridges, including obfs4proxy * New feature: Ability to use a persistent URL * New feature: Auto-stop timer, to stop OnionShare at a specified time * New feature: Get notification when Tor connection dies * Updated versions of Python, Qt, Tor, and other dependencies that are bundled * Added ability to supply a custom settings file as a command line arg * Added support for FreeBSD * Fixed small user interface issues * Fixed minor bugs * New Dutch translations ## 1.1 * OnionShare connects to Tor itself now, so opening Tor Browser in the background isn't required * In Windows and macOS, OnionShare alerts users about updates * Removed the menu bar, and adding a "Settings" button * Added desktop notifications, and a system tray icon * Ability to add multiple files and folders with a single "Add" button * Ability to delete multiple files and folders at once with the "Delete" button * Hardened some response headers sent from the web server * Minor clarity improvements to the contents of the share's web page * Alert the user rather than share an empty archive if a file was unreadable * Prettier progress bars ## 1.0 * Fixed long-standing macOS X bug that caused OnionShare to crash on older Macs (!) * Added settings dialog to configure connecting to Tor, including support for system Tor * Added support for stealth onion services (advanced option) * Added support for Whonix * Improved AppArmor profiles * Added progress bar for zipping up files * Improved the look of download progress bars * Allows developers to launch OnionShare from source tree, without building a package * Deleted legacy code, and made OnionShare purely use ephemeral Tor onion services * Switched to EFF's diceware wordlist for slugs ## 0.9.2 (Linux only) * Looks for `TOR_CONTROL_PORT` environment variable, to help Tails integration * Change how OnionShare checks to see if it's installed system-wide, to help Subgraph OS integration ## 0.9.1 * Added Nautilus extension, so you can right-click on a file and choose "Share via OnionShare", thanks to Subgraph developers * Switch to using the term "onion service" rather than "hidden service" * Fix CVE-2016-5026, minor security issue related to use of /tmp directory * Switch from PyInstaller to cx_Freeze for Windows and OSX packaging * Support CLI in Windows and OSX ## 0.9 * Slugs are now shorter and human-readable, with rate limiting to prevent URL guessing * Uses a new slug each time the server restarts * "Stop sharing automatically" enforces only one download * Users get asked if they're sure they want to close OnionShare while server is running * Added estimated time remaining progress indicator * Fixed frozen window while waiting for hidden service to start * Displays version number in both GUI and CLI * Closing window causes downloads to stop immediately * Web server listens in ports 17600-17650, for future Tails support * Updated translations * Ported from Python 2 to Python 3 and from Qt4 to Qt5 * Ported from py2app and py2exe to PyInstaller ## 0.8.1 * Fixed crash in Windows 7 * Fixed crash related to non-ephemeral hidden services in Linux * Fixed minor bugs ## 0.8 * Add support for ephemeral hidden services * Stopped leaking sender's locale on download page * Add support for Tor Messenger as provider of Tor service * Minor bugfixes, code cleanup, and refactoring ## 0.7.1 * Fixed critical bug in OS X binaries that caused crashes on some computers * Added Security Design document * Minor bugfix with Windows code signing timestamp server * Linux version uses HS dir that is allowed by Tor Browser Launcher's AppArmor profiles ## 0.7 * Added code signing for Mac OS X * Does not disable existing hidden services * Uses allowZip64 to allow compressing files >5gb * Sets HS dir to be in /var/lib/tor in Tails, to obey AppArmor rules * Misc. minor code cleanup ## 0.6 * Brand new drag-and-drop GUI with ability to start and stop server * Much cleaner code split into several files * Support for sharing multiple files and folders at once, and automatically compresses files before sharing * Redesigned receiver HTML interface * Waits for hidden service to be available before displaying URL * Cleans up hidden service directory on exit * Continuous integration with Travis * Support for multiple downloads at once * Fixed unicode-related filename and display bugs * Warns that large files could take hours to send * New translations * Several misc. bugfixes * Added code signing for Windows with Authenticode ## 0.5 * Removed webkit GUI altogether, and refactored GUI with native Qt widget * In Tails, launches separate process as root for Tor control port and firewall stuff, everything else runs as amnesia * Fixed itsdangerous dependency bug in Debian Wheezy and Tails * Guesses content type of file, responds in HTTP header ## 0.4 * Fixed critical XSS bug that could deanonymize user: https://micahflee.com/2014/07/security-advisory-upgrade-to-onionshare-0-4-immediately/ * Added CSP headers in GUI to prevent any future XSS bugs from working * Hash urandom data before using it, to avoid leaking state of entropy * Constant time compare the slug to avoid timing attacks * Cleaned up Tails firewall code ## 0.3 * Built a simple, featureful cross-platform GUI * Graphical installers for Windows and OSX * Packaged for Linux in .deb, .rpm, with desktop launcher * Installable in Tails 1.1+, with simple "install" script * Automatically copies URL to clipboard * Automatically closes when download is done by default * Shows download progress * Limited suite of tests * If a localized string doesn't exist, falls back to English * New translations: Dutch, Portuguese, German, Russian, and updated translations: Norwegian Bokmål, Spanish, French, Italian onionshare-2.6.3/LICENSE.txt000066400000000000000000001047251475545702100155350ustar00rootroot00000000000000(Note: Third-party licenses can be found under licenses/.) OnionShare Copyright (C) 2014-2022 Micah Lee, et al. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . onionshare-2.6.3/README.md000066400000000000000000000016301475545702100151600ustar00rootroot00000000000000![OnionShare](/docs/source/_static/logo.png) [![Run Tests](https://github.com/onionshare/onionshare/actions/workflows/tests.yml/badge.svg)](https://github.com/onionshare/onionshare/actions/workflows/tests.yml) # OnionShare OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. ## Installing OnionShare You can download OnionShare for Windows and macOS from the [OnionShare website](https://onionshare.org). For macOS you can also use [Homebrew](https://brew.sh/): ``` brew install --cask onionshare ``` See [these instructions](https://docs.onionshare.org/2.6/en/install.html#linux) to install OnionShare in Linux as a Flatpak or Snap package. ## Documentation To learn how OnionShare works, what its security properties are, how to use it, and how to contribute to the project, check out https://docs.onionshare.org. onionshare-2.6.3/RELEASE.md000066400000000000000000000330131475545702100153030ustar00rootroot00000000000000# OnionShare Release Process Unless you're a core OnionShare developer making a release, you'll probably never need to follow it. ## Preparing the release ### Update the version in these places - [ ] `cli/pyproject.toml` - [ ] `cli/onionshare_cli/resources/version.txt` - [ ] `desktop/pyproject.toml` - [ ] `desktop/setup.py` - [ ] `desktop/org.onionshare.OnionShare.appdata.xml` - [ ] `docs/source/conf.py` (`version` at the top, and the `versions` list too) - [ ] `snap/snapcraft.yaml` ### You also must edit these files - [ ] `desktop/org.onionshare.OnionShare.appdata.xml` should have the correct release date, and links to correct screenshots - [ ] `CHANGELOG.md` should be updated to include a list of all major changes since the last release ### Update dependencies Check `cli/pyproject.toml` to see if any hard-coded versions should be updated. Then, update the dependencies like this: ```sh cd cli poetry update cd .. ``` If you update `flask-socketio`, ensure that you also update the [socket.io.min.js](https://github.com/micahflee/onionshare/blob/develop/cli/onionshare_cli/resources/static/js/socket.io.min.js) file to a version that is [supported](https://flask-socketio.readthedocs.io/en/latest/#version-compatibility) by the updated version of `flask-socketio`. Check `desktop/pyproject.toml` to see if any hard-coded versions should be updated. Then, update the dependencies like this: ``` cd desktop poetry update cd .. ``` Update the docs dependencies like this: ``` cd docs poetry update cd .. ``` Update the versions of `meek`, `obfs4proxy`, and `snowflake` in the `desktop/scripts/build-pt-*` scripts, both the bash and PowerShell scripts. You can find the latest versions by looking at the tags in their git repos: [meek](https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/meek/-/tags), [obfs4proxy](https://gitlab.com/yawning/obfs4/-/tags), [snowflake](https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/tags). ### Update the documentation - [ ] Update all of the documentation in `docs` to cover new features, including taking new screenshots if necessary ### Finalize localization - [ ] Merge all the translations from weblate: ``` git remote add weblate https://hosted.weblate.org/projects/onionshare/translations/ git pull weblate main ``` - [ ] In `docs` run `poetry run ./check-weblate.py [API_KEY]` to see which translations are >90% in the app and docs - [ ] Edit `cli/onionshare_cli/settings.py`, make sure `self.available_locales` lists only locales that are >90% translated - [ ] From the `desktop` folder in the virtual env, run `./scripts/countries-update-list.py` to make sure the localized country list for censorship circumvention is available in all available languages - [ ] Edit `docs/source/conf.py`, make sure `languages` lists only languages that are >90% translated - [ ] Edit `docs/build.sh` and make sure `LOCALES=` lists the same languages as above, in `docs/source/conf.py` - [ ] Make sure the latest documentation is built and committed: ``` cd docs poetry install poetry run ./build.sh ``` ### Make sure Snapcraft packaging works Ensure you have the ability to run `poetry export`. You may need to run `poetry self add poetry-plugin-export@latest`, as in recent versions of Poetry it is now a plugin rather than in the core. Enter the `cli` directory and run `poetry export > ../snap/local/cli-requirements.txt` Enter the `desktop` directory and run `poetry export > ../snap/local/desktop-requirements.txt`. Now edit this file and remove the first line that has a `-e` with a path to the `cli` folder - we don't want it. In `snap/snapcraft.yaml`: - [ ] Update the version number near the top of the file. - [ ] The `tor`, `libevent`, `obfs4`, `snowflake-client`, and `meek-client` parts should be updated if necessary To test locally: - Install snapcraft with: `sudo snap install snapcraft --classic` - Build snap with: `snapcraft` - Install with: `sudo snap install ./onionshare_${VERSION}_amd64.snap --devmode` To test in the edge branch: With every commit to the `main` branch, Snapcraft's CI should trigger builds. Make sure the builds all succeeded at https://snapcraft.io/onionshare/builds (you must be logged in), and test them. You can install them with: `snap install onionshare --edge` ### Make sure the Flatpak packaging works In `flatpak/org.onionshare.OnionShare.yaml`: - [ ] Update `tor` and `libevent` - [ ] Update `obfs4proxy`, `meek-client`, and `snowflake-client` dependencies. To do this, edit the script `flatpak/generate-golang-dependencies.py` and make sure that the repository URLs and tags are the latest versions. Then run this command from the root of the onionshare repository folder: ```sh ./flatpak/generate-golang-dependencies.py ``` - [ ] Update the Python dependencies. This is super hacky. You need to use both the poetry and pip parts of [this tool](https://github.com/flatpak/flatpak-builder-tools), but the version from [this PR](https://github.com/flatpak/flatpak-builder-tools/pull/353): ```sh # get onionshare-cli dependencies cd flatpak-build-tools/poetry ./flatpak-poetry-generator.py ../../onionshare/cli/poetry.lock --production ../flatpak-json2yaml.py ./generated-poetry-sources.json mv generated-poetry-sources.yml onionshare-cli.yaml # get onionshare dependencies cd flatpak-build-tools/pip ./flatpak-pip-generator $(../../onionshare/flatpak/poetry-to-requirements.py ../../onionshare/desktop/pyproject.toml | grep -v PySide6) ../flatpak-json2yaml.py ./python3-modules.json mv python3-modules.yml onionshare-desktop.yaml ``` Now, move `onionshare-desktop.yaml` and `onionshare-cli.yaml` into the `flatpak/` folder. For the `onionshare-cli.yaml` file, adjust the `pip3 install` step so that it includes the `--use-pep517` argument. - [ ] Build and test the Flatpak package to ensure it works: ```sh flatpak-builder build --force-clean --jobs=$(nproc) --install-deps-from=flathub --install --user flatpak/org.onionshare.OnionShare.yaml flatpak run org.onionshare.OnionShare ``` ### Create a signed git tag - [ ] There must be a PGP-signed git tag for the version, e.g. for OnionShare 2.1, the tag must be `v2.1` The first step for the Linux, macOS, and Windows releases is the same. Verify the release git tag: ```sh git fetch git tag -v v$VERSION ``` If the tag verifies successfully, check it out: ```sh git checkout v$VERSION ``` ## Making the release ### Linux Snapcraft release From https://snapcraft.io/onionshare/releases (you must be logged in), promote the release from latest/edge to latest/beta, then latest/candidate, then latest/stable. ### Linux Flatpak release - [ ] Create a new branch in https://github.com/flathub/org.onionshare.OnionShare for the version - [ ] Overwrite the manifest in the flathub repo with the updated version in [flatpak/org.onionshare.OnionShare.yaml](./flatpak/org.onionshare.OnionShare.yaml) - [ ] Edit it so that the sources for `onionshare` and `onionshare-cli` are the GitHub repo, with the correct git tag, rather than the local filesystem - [ ] Ensure you also copy across the `onionshare-cli.yaml`, `onionshare-desktop.yaml`, `meek-client`, `snowflake` and `obfs4proxy` from the `flatpak/` folder into the flathub repository, so that the flathub repository has all the latest dependencies. - [ ] Make a PR in the flathub repo, and merge it to make a release ### Windows release Create a Windows 11 VM, and set it up like this: - Install [git for Windows](https://git-scm.com/download/win). - Install the latest version of 3.11 [from python.org](https://www.python.org/downloads/). - Install [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/), making sure to check "Desktop development with C++". - Download and install [7-Zip (x64)](https://7-zip.org/). Add `C:\Program Files\7-Zip` to your path. - Download and install [gpg4win](https://gpg4win.org/). Add `C:\Program Files (x86)\GnuPG\bin` to your path. - Install the Windows SDK from here: https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/. - Go to https://dotnet.microsoft.com/download/dotnet-framework and download and install .NET Framework 3.5 SP1 Runtime. I downloaded `dotnetfx35.exe`. - Go to https://wixtoolset.org/docs/wix3/ and download and install WiX toolset. I downloaded `wix314.exe`. Add `C:\Program Files (x86)\WiX Toolset v3.14\bin` to the path. Clone the OnionShare git repo and checkout the release tag. If you've used this git repo for a previous release, clean it up: - In the `onionshare/desktop` folder, delete `build` and `dist` from the previous build. - Delete the poetry environment. You can find its name by run `poetry env list`, and then you can delete it with `poetry env remove [ENV_NAME]`. Install Poetry and deps. Open a Developer PowerShell for VS window, change to the `onionshare` folder, and run: ```powershell cd desktop pip install poetry poetry install ``` Github Actions will build the binaries. Find the Github Actions `build` workflow, switch to the summary tab, download `win64-build.zip`, and copy it to the Windows packaging environment. Extract `win64-build.zip`. Run: ``` poetry run python .\scripts\build-windows.py codesign [path] poetry run python .\scripts\build-windows.py package [path] ``` This will create: - `desktop/dist/OnionShare-win64-$VERSION.msi` ### macOS release In order to make a universal2 binary, you must following these instructions using a Mac with Apple Silicon. To keep a clean environment, you can use VM. Set up the VM like this: - Install [Homebrew](https://brew.sh/) - `brew install create-dmg libiodbc` - Install the latest Python 3.11 from https://www.python.org/downloads/ - Install ARM64 version of Go from https://go.dev/dl/ - Install "Postgres.app with PostgreSQL 16 (Universal)" from https://postgresapp.com/downloads.html Clone the OnionShare git repo and checkout the release tag. If you've used this git repo for a previous release, clean it up: ```sh cd desktop rm -rf build dist # Delete the old poetry environment poetry env remove $(poetry env list | grep "(Activated)" | cut -d" " -f1) ``` Install and build dependencies: ```sh cd desktop python3 -m pip install poetry /Library/Frameworks/Python.framework/Versions/3.11/bin/poetry install /Library/Frameworks/Python.framework/Versions/3.11/bin/poetry run python ./scripts/get-tor.py macos ./scripts/build-pt-obfs4proxy.sh ./scripts/build-pt-snowflake.sh ./scripts/build-pt-meek.sh ``` Make the Apple Silicon app bundle: ```sh /Library/Frameworks/Python.framework/Versions/3.11/bin/poetry run python ./setup-freeze.py bdist_mac /Library/Frameworks/Python.framework/Versions/3.11/bin/poetry run python ./scripts/build-macos.py cleanup-build ``` The Apple Silicon app bundle will be in `build` folder called `OnionShare.app`. Github Actions will build the Intel app bundle. Find the Github Actions `build` workflow, switch to the summary tab, and download the `mac-intel-build` artifact. Extract it, and you'll get the Intel `OnionShare.app` folder. Next, merge these two app bundles into a single universal2 app bundle: ```sh poetry run ./scripts/macos-merge-universal.py [intel_app_path] [silicon_app_path] [universal2_app_path] ``` Finally, code sign and package the universal2 app bundle: ```sh poetry run python ./scripts/build-macos.py codesign [universal2_app_path] poetry run python ./scripts/build-macos.py package [universal2_app_path] ``` The will create `dist/OnionShare-$VERSION.dmg`. Now, notarize the release. ```sh export APPLE_PASSWORD="changeme" # app-specific Apple ID password export VERSION=$(cat ../cli/onionshare_cli/resources/version.txt) # Notarize it xcrun notarytool submit --apple-id "micah@micahflee.com" --team-id N9B95FDWH4 --password "$APPLE_PASSWORD" --progress --wait dist/OnionShare-$VERSION.dmg # After it's approved, staple the ticket xcrun stapler staple dist/OnionShare-$VERSION.dmg ``` This will create `desktop/dist/OnionShare-$VERSION.dmg`, signed and notarized. ### Source package To make a source package, run `./build-source.sh $TAG`, where `$TAG` is the name of the signed git tag, e.g. `v2.1`. This will create `dist/onionshare-$VERSION.tar.gz`. ## Publishing the release ### PGP signatures After following all of the previous steps, gather these files: - `onionshare_${VERSION}_amd64.snap` - `OnionShare.flatpak` (rename to `OnionShare-$VERSION.flatpak`) - `OnionShare-win64-$VERSION.msi` - `OnionShare-$VERSION.dmg` - `onionshare-$VERSION.tar.gz` Create a PGP signature for each of these files, e.g: ```sh gpg -a --detach-sign OnionShare-$VERSION.tar.gz gpg -a --detach-sign [... and so on] ``` ### Create a release on GitHub: - Match it to the version tag, put the changelog in description of the release - Upload all 8 files (binary and source packages and their `.asc` signatures) ### Update onionshare-cli on PyPi ```sh cd cli poetry install poetry publish --build ``` ### Update Homebrew - Make a PR to [homebrew-cask](https://github.com/homebrew/homebrew-cask) to update the macOS version ### Update onionshare.org - Upload all 10 files to https://onionshare.org/dist/$VERSION/ - Update the [onionshare-website](https://github.com/micahflee/onionshare-website) repo: - Edit `latest-version.txt` to match the latest version - Update the version number and download links - Deploy to https://onionshare.org/ ### Update docs.onionshare.org - Upload everything from `docs/build/docs` to https://docs.onionshare.org/ ### Update the community - Upload all 10 files to the OnionShare team Keybase filesystem - Email the [onionshare-dev](https://lists.riseup.net/www/subscribe/onionshare-dev) mailing list announcing the release - Blog, tweet, toot, etc. onionshare-2.6.3/build-source.sh000077500000000000000000000025611475545702100166410ustar00rootroot00000000000000#!/bin/bash # The script builds a source package # Usage display_usage() { echo "Usage: $0 [tag]" } if [ $# -lt 1 ] then display_usage exit 1 fi # Input validation TAG=$1 if [ "${TAG:0:1}" != "v" ] then echo "Tag must start with 'v' character" exit 1 fi VERSION=${TAG:1} # Make sure tag exists git tag | grep "^$TAG\$" if [ $? -ne 0 ] then echo "Tag does not exist" exit 1 fi # Clone source mkdir -p build/source mkdir -p dist cd build/source git clone --single-branch --branch $TAG --depth 1 https://github.com/onionshare/onionshare.git cd onionshare # Verify tag git tag -v $TAG 2> ../verify.txt if [ $? -ne 0 ] then echo "Tag does not verify" exit 1 fi cat ../verify.txt | grep -e "using RSA key 927F419D7EC82C2F149C1BD1403C2657CD994F73" -e "using RSA key 2E530667425F4B93874935707B7F1772C0C6FCBF" if [ $? -ne 0 ] then echo "Tag signed with wrong key" exit 1 fi cat ../verify.txt | grep "^gpg: Good signature from" if [ $? -ne 0 ] then echo "Tag verification missing 'Good signature from'" exit 1 fi # Checkout code git checkout $TAG # Delete .git, compress, and PGP sign cd .. rm -rf onionshare/.git tar -czf onionshare-$VERSION.tar.gz onionshare/ # Move source package to dist cd ../.. mv build/source/onionshare-$VERSION.tar.gz dist # Clean up rm -rf build/source/onionshare rm build/source/verify.txt echo "Source package complete, file in dist" onionshare-2.6.3/cli/000077500000000000000000000000001475545702100144505ustar00rootroot00000000000000onionshare-2.6.3/cli/README.md000066400000000000000000000056231475545702100157350ustar00rootroot00000000000000``` ╭───────────────────────────────────────────╮ │ * ▄▄█████▄▄ * │ │ ▄████▀▀▀████▄ * │ │ ▀▀█▀ ▀██▄ │ │ * ▄█▄ ▀██▄ │ │ ▄█████▄ ███ -+- │ │ ███ ▀█████▀ │ │ ▀██▄ ▀█▀ │ │ * ▀██▄ ▄█▄▄ * │ │ * ▀████▄▄▄████▀ │ │ ▀▀█████▀▀ │ │ -+- * │ │ ▄▀▄ ▄▀▀ █ │ │ █ █ ▀ ▀▄ █ │ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ │ │ │ https://onionshare.org/ │ ╰───────────────────────────────────────────╯ ``` ## Installing OnionShare CLI First, make sure you have `tor` and `python3` installed. In Linux, install it through your package manager. In macOS, install it with [Homebrew](https://brew.sh): `brew install tor`. Second, OnionShare is written in python, and you can install the command line version use python's package manager `pip`. ### Requirements Debian/Ubuntu (APT): ```sh sudo apt-get install tor python3-pip ``` Arch (Pacman): ```sh sudo pacman -S tor python-pip ``` CentOS, Red Hat, and Fedora (Yum): ```sh sudo yum install tor python3 python3-wheel ``` macOS (Homebrew): ```sh brew install tor python sudo easy_install pip ``` ### Main #### Installation Install OnionShare CLI: ```sh pip install --user onionshare-cli ``` #### Set path When you install programs with pip and use the `--user` flag, it installs them into *~/.local/bin*, which isn't in your path by default. To add *~/.local/bin* to your path automatically for the next time you reopen the terminal or source your shell configuration file, do the following: Apply the path to your shell file: ```sh printf "PATH=\$PATH:~/.local/bin\n" >> ~/.${SHELL##*/}rc . ~/.${SHELL##*/}rc ``` #### Usage Then run it with: ```sh onionshare-cli --help ``` ## Developing OnionShare CLI You must have python3 and [poetry](https://python-poetry.org/) installed. Install dependencies with poetry: ```sh poetry install ``` To run from the source tree: ```sh poetry run onionshare-cli ``` To run tests: ```sh poetry run pytest -v ./tests ``` onionshare-2.6.3/cli/onionshare_cli/000077500000000000000000000000001475545702100174445ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/__init__.py000066400000000000000000000465301475545702100215650ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import sys import time import argparse import threading from datetime import datetime from datetime import timedelta from .common import Common, CannotFindTor from .web import Web from .onion import TorErrorProtocolError, TorTooOldEphemeral, TorTooOldStealth, Onion from .onionshare import OnionShare from .mode_settings import ModeSettings from qrcode import QRCode def main(cwd=None): """ The main() function implements all of the logic that the command-line version of onionshare uses. """ common = Common() common.display_banner() # OnionShare CLI in OSX needs to change current working directory (#132) if common.platform == "Darwin": if cwd: os.chdir(cwd) # Parse arguments parser = argparse.ArgumentParser( formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=28) ) # Select modes parser.add_argument( "--receive", action="store_true", dest="receive", help="Receive files" ) parser.add_argument( "--website", action="store_true", dest="website", help="Publish website" ) parser.add_argument( "--chat", action="store_true", dest="chat", help="Start chat server" ) # Tor connection-related args parser.add_argument( "--local-only", action="store_true", dest="local_only", default=False, help="Don't use Tor (only for development)", ) parser.add_argument( "--connect-timeout", metavar="SECONDS", dest="connect_timeout", default=120, help="Give up connecting to Tor after a given amount of seconds (default: 120)", ) parser.add_argument( "--config", metavar="FILENAME", default=None, help="Filename of custom global settings", ) # Persistent file parser.add_argument( "--persistent", metavar="FILENAME", default=None, help="Filename of persistent session", ) # General args parser.add_argument("--title", metavar="TITLE", default=None, help="Set a title") parser.add_argument( "--public", action="store_true", dest="public", default=False, help="Don't use a private key", ) parser.add_argument( "--auto-start-timer", metavar="SECONDS", dest="autostart_timer", default=0, help="Start onion service at scheduled time (N seconds from now)", ) parser.add_argument( "--auto-stop-timer", metavar="SECONDS", dest="autostop_timer", default=0, help="Stop onion service at schedule time (N seconds from now)", ) # Share args parser.add_argument( "--no-autostop-sharing", action="store_true", dest="no_autostop_sharing", default=False, help="Share files: Continue sharing after files have been sent (default is to stop sharing)", ) parser.add_argument( "--log-filenames", action="store_true", dest="log_filenames", default=False, help="Log file download activity to stdout" ) parser.add_argument( "--qr", action="store_true", dest="qr", default=False, help="Display a QR code in the terminal for share links", ) # Receive args parser.add_argument( "--data-dir", metavar="data_dir", default=None, help="Receive files: Save files received to this directory", ) parser.add_argument( "--webhook-url", metavar="webhook_url", default=None, help="Receive files: URL to receive webhook notifications", ) parser.add_argument( "--disable-text", action="store_true", dest="disable_text", help="Receive files: Disable receiving text messages", ) parser.add_argument( "--disable-files", action="store_true", dest="disable_files", help="Receive files: Disable receiving files", ) # Website args parser.add_argument( "--disable_csp", action="store_true", dest="disable_csp", default=False, help="Publish website: Disable the default Content Security Policy header (allows your website to use third-party resources)", ) parser.add_argument( "--custom_csp", metavar="custom_csp", default=None, help="Publish website: Set a custom Content Security Policy header", ) # Other parser.add_argument( "-v", "--verbose", action="store_true", dest="verbose", help="Log OnionShare errors to stdout, and web errors to disk", ) parser.add_argument( "filename", metavar="filename", nargs="*", help="List of files or folders to share", ) args = parser.parse_args() filenames = args.filename for i in range(len(filenames)): filenames[i] = os.path.abspath(filenames[i]) receive = bool(args.receive) website = bool(args.website) chat = bool(args.chat) local_only = bool(args.local_only) connect_timeout = int(args.connect_timeout) config_filename = args.config persistent_filename = args.persistent title = args.title public = bool(args.public) autostart_timer = int(args.autostart_timer) autostop_timer = int(args.autostop_timer) autostop_sharing = not bool(args.no_autostop_sharing) print_qr = bool(args.qr) data_dir = args.data_dir webhook_url = args.webhook_url disable_text = args.disable_text disable_files = args.disable_files disable_csp = bool(args.disable_csp) custom_csp = args.custom_csp log_filenames = bool(args.log_filenames) verbose = bool(args.verbose) # Verbose mode? common.verbose = verbose # Re-load settings, if a custom config was passed in if config_filename: common.load_settings(config_filename) else: common.load_settings() # Mode settings if persistent_filename: mode_settings = ModeSettings(common, persistent_filename) mode_settings.set("persistent", "enabled", True) else: mode_settings = ModeSettings(common) if receive: mode = "receive" elif website: mode = "website" elif chat: mode = "chat" else: mode = "share" if mode_settings.just_created: # This means the mode settings were just created, not loaded from disk mode_settings.set("general", "title", title) mode_settings.set("general", "public", public) mode_settings.set("general", "autostart_timer", autostart_timer) mode_settings.set("general", "autostop_timer", autostop_timer) mode_settings.set("general", "qr", print_qr) if persistent_filename: mode_settings.set("persistent", "mode", mode) if mode == "share": mode_settings.set("share", "autostop_sharing", autostop_sharing) mode_settings.set("share", "log_filenames", log_filenames) if mode == "receive": if data_dir: mode_settings.set("receive", "data_dir", data_dir) if webhook_url: mode_settings.set("receive", "webhook_url", webhook_url) mode_settings.set("receive", "disable_text", disable_text) mode_settings.set("receive", "disable_files", disable_files) if mode == "website": if disable_csp and custom_csp: print("You cannot disable the CSP and set a custom one. Either set --disable-csp or --custom-csp but not both.") sys.exit() if disable_csp: mode_settings.set("website", "disable_csp", True) mode_settings.set("website", "custom_csp", None) if custom_csp: mode_settings.set("website", "custom_csp", custom_csp) mode_settings.set("website", "disable_csp", False) mode_settings.set("website", "log_filenames", log_filenames) else: # See what the persistent mode was mode = mode_settings.get("persistent", "mode") # In share and website mode, you must supply a list of filenames if mode == "share" or mode == "website": # Unless you passed in a persistent filename, in which case get the filenames from # the mode settings if ( persistent_filename and not mode_settings.just_created and len(filenames) != 0 ): filenames = mode_settings.get(mode, "filenames") else: # Make sure filenames given if not using receiver mode if len(filenames) == 0: if persistent_filename: mode_settings.delete() parser.print_help() sys.exit() # Validate filenames valid = True for filename in filenames: if not os.path.isfile(filename) and not os.path.isdir(filename): print(f"{filename} is not a valid file.") valid = False if not os.access(filename, os.R_OK): print(f"{filename} is not a readable file.") valid = False if not valid: sys.exit() # Save the filenames in persistent file if persistent_filename: mode_settings.set(mode, "filenames", filenames) # In receive mode, you must allows either text, files, or both if mode == "receive" and disable_text and disable_files: print("You cannot disable both text and files") sys.exit() # Create the Web object web = Web(common, False, mode_settings, mode) # Start the Onion object try: onion = Onion(common, use_tmp_dir=True) except CannotFindTor: print("You must install tor to use OnionShare from the command line") if common.platform == "Darwin": print("In macOS, you can do this with Homebrew (https://brew.sh):") print(" brew install tor") sys.exit() try: onion.connect( custom_settings=False, config=config_filename, connect_timeout=connect_timeout, local_only=local_only, ) except KeyboardInterrupt: print("") sys.exit() except Exception: sys.exit() # Start the onionshare app try: common.settings.load() # Receive mode needs to know the tor proxy details for webhooks if mode == "receive": if local_only: web.proxies = None else: (socks_address, socks_port) = onion.get_tor_socks_port() web.proxies = { "http": f"socks5h://{socks_address}:{socks_port}", "https": f"socks5h://{socks_address}:{socks_port}", } app = OnionShare(common, onion, local_only, autostop_timer) app.choose_port() # Delay the startup if a startup timer was set if autostart_timer > 0: # Can't set a schedule that is later than the auto-stop timer if autostop_timer > 0 and autostop_timer < autostart_timer: print( "The auto-stop time can't be the same or earlier than the auto-start time. Please update it to start sharing." ) sys.exit() app.start_onion_service(mode, mode_settings, False) url = f"http://{app.onion_host}" schedule = datetime.now() + timedelta(seconds=autostart_timer) if mode == "receive": print( f"Files sent to you appear in this folder: {mode_settings.get('receive', 'data_dir')}" ) print("") print( "Warning: Receive mode lets people upload files to your computer. Some files can potentially take " "control of your computer if you open them. Only open things from people you trust, or if you know " "what you are doing." ) print("") if not mode_settings.get("general", "public"): print( f"Give this address and private key to your sender, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}" ) print(f"Private key: {app.auth_string}") else: print( f"Give this address to your sender, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}" ) else: if not mode_settings.get("general", "public"): print( f"Give this address and private key to your recipient, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}" ) print(f"Private key: {app.auth_string}") else: print( f"Give this address to your recipient, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}" ) print(url) if mode_settings.get("general", "qr"): qr = QRCode() qr.add_data(url) print("Onion address as QR code:") qr.print_ascii() if not mode_settings.get("general", "public"): qr.clear() qr.add_data(app.auth_string) print("Private key as QR code:") qr.print_ascii() print("") print("Waiting for the scheduled time before starting...") app.onion.cleanup(False) time.sleep(autostart_timer) app.start_onion_service(mode, mode_settings) else: app.start_onion_service(mode, mode_settings) except KeyboardInterrupt: print("") sys.exit() except (TorTooOldEphemeral, TorTooOldStealth, TorErrorProtocolError) as e: print("") sys.exit() if mode == "website": # Prepare files to share try: web.website_mode.set_file_info(filenames) except OSError as e: print(e.strerror) sys.exit(1) if mode == "share": # Prepare files to share print("Compressing files.") try: web.share_mode.set_file_info(filenames) except OSError as e: print(e.strerror) sys.exit(1) # Warn about sending large files over Tor if web.share_mode.download_filesize >= 157_286_400: # 150mb print("") print("Warning: Sending a large share could take hours") print("") # Start OnionShare http service in new thread t = threading.Thread(target=web.start, args=(app.port,)) t.daemon = True t.start() try: # Trap Ctrl-C time.sleep(0.2) # start auto-stop timer thread if app.autostop_timer > 0: app.autostop_timer_thread.start() # Build the URL url = f"http://{app.onion_host}" print("") if autostart_timer > 0: print("Server started") else: if mode == "receive": print( f"Files sent to you appear in this folder: {mode_settings.get('receive', 'data_dir')}" ) print("") print( "Warning: Receive mode lets people upload files to your computer. Some files can potentially take " "control of your computer if you open them. Only open things from people you trust, or if you know " "what you are doing." ) print("") if mode_settings.get("general", "public"): print("Give this address to the sender:") print(url) else: print("Give this address and private key to the sender:") print(url) print(f"Private key: {app.auth_string}") else: if mode_settings.get("general", "public"): print("Give this address to the recipient:") print(url) else: print("Give this address and private key to the recipient:") print(url) print(f"Private key: {app.auth_string}") if mode_settings.get("general", "qr"): qr = QRCode() qr.add_data(url) print("Onion address as QR code:") qr.print_ascii() if not mode_settings.get("general", "public"): qr.clear() qr.add_data(app.auth_string) print("Private key as QR code:") qr.print_ascii() print("") print("Press Ctrl+C to stop the server") # Wait for app to close while t.is_alive(): if app.autostop_timer > 0: # if the auto-stop timer was set and has run out, stop the server if not app.autostop_timer_thread.is_alive(): if mode == "share": # If there were no attempts to download the share, or all downloads are done, we can stop if not web.share_mode.download_in_progress or web.share_mode.cur_history_id == 0 or web.done: print("Stopped because auto-stop timer ran out") web.stop(app.port) break elif mode == "receive": if ( web.receive_mode.cur_history_id == 0 or not web.receive_mode.uploads_in_progress ): print("Stopped because auto-stop timer ran out") web.stop(app.port) break web.receive_mode.can_upload = False else: # website or chat mode print("Stopped because auto-stop timer ran out") web.stop(app.port) break # Allow KeyboardInterrupt exception to be handled with threads # https://stackoverflow.com/questions/3788208/python-threading-ignores-keyboardinterrupt-exception time.sleep(0.2) except KeyboardInterrupt: web.stop(app.port) finally: # Shutdown web.cleanup() t.join() onion.cleanup() if __name__ == "__main__": main() onionshare-2.6.3/cli/onionshare_cli/censorship.py000066400000000000000000000254251475545702100222030ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import requests class CensorshipCircumventionError(Exception): """ There was a problem connecting to the Tor CensorshipCircumvention API. """ class CensorshipCircumvention(object): """ Connect to the Tor Moat APIs to retrieve censorship circumvention recommendations or the latest bridges. We support reaching this API over Tor, or Meek (domain fronting) if Tor is not connected. """ def __init__(self, common, meek=None, onion=None): """ Set up the CensorshipCircumvention object to hold common and meek objects. """ self.common = common self.common.log("CensorshipCircumvention", "__init__") self.api_proxies = {} if meek: self.meek = meek self.common.log( "CensorshipCircumvention", "__init__", "Using Meek with CensorshipCircumvention API", ) self.api_proxies = self.meek.meek_proxies if onion: self.onion = onion if not self.onion.is_authenticated: return False else: self.common.log( "CensorshipCircumvention", "__init__", "Using Tor with CensorshipCircumvention API", ) (socks_address, socks_port) = self.onion.get_tor_socks_port() self.api_proxies = { "http": f"socks5h://{socks_address}:{socks_port}", "https": f"socks5h://{socks_address}:{socks_port}", } def request_map(self, country=False): """ Retrieves the Circumvention map from Tor Project and store it locally for further look-ups if required. Optionally pass a country code in order to get recommended settings just for that country. Note that this API endpoint doesn't return actual bridges, it just returns the recommended bridge type countries. """ self.common.log("CensorshipCircumvention", "request_map", f"country={country}") if not self.api_proxies: return False endpoint = "https://bridges.torproject.org/moat/circumvention/map" data = {} if country: data = {"country": country} try: r = requests.post( endpoint, json=data, headers={"Content-Type": "application/vnd.api+json"}, proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( "CensorshipCircumvention", "request_map", f"status_code={r.status_code}", ) return False result = r.json() if "errors" in result: self.common.log( "CensorshipCircumvention", "request_map", f"errors={result['errors']}", ) return False return result except requests.exceptions.RequestException as e: raise CensorshipCircumventionError(e) def request_settings(self, country=False, transports=False): """ Retrieves the Circumvention Settings from Tor Project, which will return recommended settings based on the country code of the requesting IP. Optionally, a country code can be specified in order to override the IP detection. Optionally, a list of transports can be specified in order to return recommended settings for just that transport type. """ self.common.log( "CensorshipCircumvention", "request_settings", f"country={country}, transports={transports}", ) if not self.api_proxies: return False endpoint = "https://bridges.torproject.org/moat/circumvention/settings" data = {} if country: self.common.log( "CensorshipCircumvention", "request_settings", f"Trying to obtain bridges for country={country}", ) data = {"country": country} if transports: data.append({"transports": transports}) try: r = requests.post( endpoint, json=data, headers={"Content-Type": "application/vnd.api+json"}, proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( "CensorshipCircumvention", "request_settings", f"status_code={r.status_code}", ) return False result = r.json() self.common.log( "CensorshipCircumvention", "request_settings", f"result={result}", ) if "errors" in result: self.common.log( "CensorshipCircumvention", "request_settings", f"errors={result['errors']}", ) return False # There are no settings - perhaps this country doesn't require censorship circumvention? # This is not really an error, so we can just check if False and assume direct Tor # connection will work. if not "settings" in result or result["settings"] is None: self.common.log( "CensorshipCircumvention", "request_settings", "No settings found for this country", ) return False return result except requests.exceptions.RequestException as e: raise CensorshipCircumventionError(e) def request_builtin_bridges(self): """ Retrieves the list of built-in bridges from the Tor Project. """ if not self.api_proxies: return False endpoint = "https://bridges.torproject.org/moat/circumvention/builtin" try: r = requests.post( endpoint, headers={"Content-Type": "application/vnd.api+json"}, proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( "CensorshipCircumvention", "request_builtin_bridges", f"status_code={r.status_code}", ) return False result = r.json() if "errors" in result: self.common.log( "CensorshipCircumvention", "request_builtin_bridges", f"errors={result['errors']}", ) return False return result except requests.exceptions.RequestException as e: raise CensorshipCircumventionError(e) def save_settings(self, settings, bridge_settings): """ Checks the bridges and saves them in settings. """ self.common.log( "CensorshipCircumvention", "save_settings", f"bridge_settings: {bridge_settings}", ) bridges_ok = False self.settings = settings # We iterate over each group of bridges returned in settings. # The first set of valid bridges are the ones we use. if bridge_settings.get("settings", False): for returned_bridge_settings in bridge_settings["settings"]: if returned_bridge_settings.get("bridges", False): bridges = returned_bridge_settings["bridges"] bridge_strings = bridges["bridge_strings"] self.settings.set("bridges_type", "custom") # Sanity check the bridges provided from the Tor API before saving bridges_checked = self.common.check_bridges_valid(bridge_strings) if bridges_checked: self.settings.set("bridges_custom", "\n".join(bridges_checked)) bridges_ok = True break # If we got any good bridges, save them to settings and return. if bridges_ok: self.common.log( "CensorshipCircumvention", "save_settings", "Saving settings with automatically-obtained bridges", ) self.settings.set("bridges_enabled", True) self.settings.save() return True else: self.common.log( "CensorshipCircumvention", "save_settings", "Could not use any of the obtained bridges.", ) return False def request_default_bridges(self): """ Retrieves the list of default fall-back bridges from the Tor Project. These are intended for when no censorship settings were found for a specific country, but maybe there was some connection issue anyway. """ if not self.api_proxies: return False endpoint = "https://bridges.torproject.org/moat/circumvention/defaults" try: r = requests.get( endpoint, headers={"Content-Type": "application/vnd.api+json"}, proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( "CensorshipCircumvention", "request_default_bridges", f"status_code={r.status_code}", ) return False result = r.json() if "errors" in result: self.common.log( "CensorshipCircumvention", "request_default_bridges", f"errors={result['errors']}", ) return False return result except requests.exceptions.RequestException as e: raise CensorshipCircumventionError(e) onionshare-2.6.3/cli/onionshare_cli/common.py000066400000000000000000000563521475545702100213210ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import base64 import hashlib import importlib.resources as importlib_resources import os import platform import random import requests import socket import sys import threading import time import shutil import re import colorama from colorama import Fore, Back, Style from .settings import Settings class CannotFindTor(Exception): """ OnionShare can't find a tor binary """ class Common: """ The Common object is shared amongst all parts of OnionShare. """ def __init__(self, verbose=False): self.verbose = verbose colorama.init(autoreset=True) # The platform OnionShare is running on self.platform = platform.system() if self.platform.endswith("BSD") or self.platform == "DragonFly": self.platform = "BSD" # The current version of OnionShare with open(self.get_resource_path("version.txt")) as f: self.version = f.read().strip() def display_banner(self): """ Raw ASCII art example: ╭───────────────────────────────────────────╮ │ * ▄▄█████▄▄ * │ │ ▄████▀▀▀████▄ * │ │ ▀▀█▀ ▀██▄ │ │ * ▄█▄ ▀██▄ │ │ ▄█████▄ ███ -+- │ │ ███ ▀█████▀ │ │ ▀██▄ ▀█▀ │ │ * ▀██▄ ▄█▄▄ * │ │ * ▀████▄▄▄████▀ │ │ ▀▀█████▀▀ │ │ -+- * │ │ ▄▀▄ ▄▀▀ █ │ │ █ █ ▀ ▀▄ █ │ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ │ │ │ v2.3.1 │ │ │ │ https://onionshare.org/ │ ╰───────────────────────────────────────────╯ """ try: print( Back.MAGENTA + Fore.WHITE + "╭───────────────────────────────────────────╮" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "▄▄█████▄▄" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▄████▀▀▀████▄" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▀▀█▀ ▀██▄ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "▄█▄ ▀██▄ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▄█████▄ ███" + Fore.LIGHTMAGENTA_EX + " -+- " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ███ ▀█████▀ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▀██▄ ▀█▀ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "▀██▄ ▄█▄▄" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.LIGHTMAGENTA_EX + " * " + Fore.WHITE + "▀████▄▄▄████▀ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▀▀█████▀▀ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.LIGHTMAGENTA_EX + " -+- * " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▄▀▄ ▄▀▀ █ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " █ █ ▀ ▀▄ █ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│ │" ) left_spaces = (43 - len(self.version) - 1) // 2 right_spaces = left_spaces if left_spaces + len(self.version) + 1 + right_spaces < 43: right_spaces += 1 print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + f"{' '*left_spaces}v{self.version}{' '*right_spaces}" + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "│ │" ) print( Back.MAGENTA + Fore.WHITE + "│" + Fore.WHITE + " https://onionshare.org/ " + Fore.WHITE + "│" ) print( Back.MAGENTA + Fore.WHITE + "╰───────────────────────────────────────────╯" ) print() except: # If anything fails, print a boring banner print(f"OnionShare v{self.version}") print("https://onionshare.org/") print() def load_settings(self, config=None): """ Loading settings, optionally from a custom config json file. """ self.settings = Settings(self, config) self.settings.load() def log(self, module, func, msg=None): """ If verbose mode is on, log error messages to stdout """ if self.verbose: timestamp = time.strftime("%b %d %Y %X") final_msg = f"{Fore.LIGHTBLACK_EX + Style.DIM}[{timestamp}]{Style.RESET_ALL} {Fore.WHITE + Style.DIM}{module}.{func}{Style.RESET_ALL}" if msg: final_msg = ( f"{final_msg}{Fore.WHITE + Style.DIM}: {msg}{Style.RESET_ALL}" ) print(final_msg) def get_resource_path(self, filename): """ Returns the absolute path of a resource """ ref = importlib_resources.files("onionshare_cli.resources") / filename with importlib_resources.as_file(ref) as path: self.log("Common", "get_resource_path", f"filename={filename}, path={str(path)}") return str(path) def get_tor_paths(self): if self.platform == "Linux": tor_path = shutil.which("tor") if not tor_path: raise CannotFindTor() obfs4proxy_file_path = shutil.which("obfs4proxy") snowflake_file_path = shutil.which("snowflake-client") meek_client_file_path = shutil.which("meek-client") prefix = os.path.dirname(os.path.dirname(tor_path)) tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") elif self.platform == "Windows": # In Windows, the Tor binaries are in the onionshare package, not the onionshare_cli package base_path = self.get_resource_path("tor") base_path = base_path.replace("onionshare_cli", "onionshare") tor_path = os.path.join(base_path, "tor.exe") # If tor.exe isn't there, mayber we're running from the source tree if not os.path.exists(tor_path): self.log( "Common", "get_tor_paths", f"Cannot find tor.exe at {tor_path}" ) base_path = os.path.join(os.getcwd(), "onionshare", "resources", "tor") tor_path = os.path.join(base_path, "tor.exe") if not os.path.exists(tor_path): self.log( "Common", "get_tor_paths", f"Cannot find tor.exe at {tor_path}" ) raise CannotFindTor() obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy.exe") snowflake_file_path = os.path.join(base_path, "snowflake-client.exe") meek_client_file_path = os.path.join(base_path, "meek-client.exe") tor_geo_ip_file_path = os.path.join(base_path, "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") elif self.platform == "Darwin": # Let's see if we have tor binaries in the onionshare GUI package base_path = self.get_resource_path("tor") base_path = base_path.replace("onionshare_cli", "onionshare") tor_path = os.path.join(base_path, "tor") if os.path.exists(tor_path): obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") snowflake_file_path = os.path.join(base_path, "snowflake-client") meek_client_file_path = os.path.join(base_path, "meek-client") tor_geo_ip_file_path = os.path.join(base_path, "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") else: # Fallback to looking in the path tor_path = shutil.which("tor") if not os.path.exists(tor_path): raise CannotFindTor() obfs4proxy_file_path = shutil.which("obfs4proxy") snowflake_file_path = shutil.which("snowflake-client") meek_client_file_path = shutil.which("meek-client") prefix = os.path.dirname(os.path.dirname(tor_path)) tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") elif self.platform == "BSD": tor_path = "/usr/local/bin/tor" tor_geo_ip_file_path = "/usr/local/share/tor/geoip" tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6" obfs4proxy_file_path = "/usr/local/bin/obfs4proxy" snowflake_file_path = "/usr/local/bin/snowflake-client" meek_client_file_path = "/usr/local/bin/meek-client" return ( tor_path, tor_geo_ip_file_path, tor_geo_ipv6_file_path, obfs4proxy_file_path, snowflake_file_path, meek_client_file_path, ) def build_data_dir(self): """ Returns the path of the OnionShare data directory. """ if self.platform == "Windows": try: appdata = os.environ["APPDATA"] onionshare_data_dir = f"{appdata}\\OnionShare" except Exception: # If for some reason we don't have the 'APPDATA' environment variable # (like running tests in Linux while pretending to be in Windows) try: xdg_config_home = os.environ["XDG_CONFIG_HOME"] onionshare_data_dir = f"{xdg_config_home}/onionshare" except Exception: onionshare_data_dir = os.path.expanduser("~/.config/onionshare") elif self.platform == "Darwin": onionshare_data_dir = os.path.expanduser( "~/Library/Application Support/OnionShare" ) else: try: xdg_config_home = os.environ["XDG_CONFIG_HOME"] onionshare_data_dir = f"{xdg_config_home}/onionshare" except Exception: onionshare_data_dir = os.path.expanduser("~/.config/onionshare") # Modify the data dir if running tests if getattr(sys, "onionshare_test_mode", False): onionshare_data_dir += "-testdata" os.makedirs(onionshare_data_dir, 0o700, True) return onionshare_data_dir def build_tmp_dir(self): """ Returns path to a folder that can hold temporary files """ tmp_dir = os.path.join(self.build_data_dir(), "tmp") os.makedirs(tmp_dir, 0o700, True) return tmp_dir def build_persistent_dir(self): """ Returns the path to the folder that holds persistent files """ persistent_dir = os.path.join(self.build_data_dir(), "persistent") os.makedirs(persistent_dir, 0o700, True) return persistent_dir def build_tor_dir(self): """ Returns path to the tor data directory """ tor_dir = os.path.join(self.build_data_dir(), "tor_data") os.makedirs(tor_dir, 0o700, True) return tor_dir def build_password(self, word_count=2): """ Returns a random string made of words from the wordlist, such as "deter-trig". """ with open(self.get_resource_path("wordlist.txt")) as f: wordlist = f.read().split() r = random.SystemRandom() return "-".join(r.choice(wordlist) for _ in range(word_count)) def build_username(self, word_count=2): """ Returns a random string made of words from the wordlist, such as "deter-trig". """ with open(self.get_resource_path("wordlist.txt")) as f: wordlist = f.read().split() r = random.SystemRandom() return "-".join(r.choice(wordlist) for _ in range(word_count)) def check_bridges_valid(self, bridges): """ Does a regex check against a supplied list of bridges, to make sure they are valid strings depending on the bridge type. """ valid_bridges = [] self.log("Common", "check_bridges_valid", "Checking bridge syntax") for bridge in bridges: if bridge != "": # Check the syntax of the custom bridge to make sure it looks legitimate ipv4_pattern = re.compile( r"(obfs4\s+)?(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):([0-9]+)(\s+)([A-Z0-9]+)(.+)$" ) ipv6_pattern = re.compile( r"(obfs4\s+)?\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\]:[0-9]+\s+[A-Z0-9]+(.+)$" ) meek_lite_pattern = re.compile( r"(meek_lite)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)(\s)+url=(.+)(\s)+front=(.+)" ) snowflake_pattern = re.compile( r"(snowflake)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)" ) if ( ipv4_pattern.match(bridge) or ipv6_pattern.match(bridge) or meek_lite_pattern.match(bridge) or snowflake_pattern.match(bridge) ): valid_bridges.append(bridge) if valid_bridges: return valid_bridges else: return False def is_flatpak(self): """ Returns True if OnionShare is running in a Flatpak sandbox """ return os.environ.get("FLATPAK_ID") == "org.onionshare.OnionShare" def is_snapcraft(self): """ Returns True if OnionShare is running in a Snapcraft sandbox """ return os.environ.get("SNAP_INSTANCE_NAME") == "onionshare" @staticmethod def random_string(num_bytes, output_len=None): """ Returns a random string with a specified number of bytes. """ b = os.urandom(num_bytes) h = hashlib.sha256(b).digest()[:16] s = base64.b32encode(h).lower().replace(b"=", b"").decode("utf-8") if not output_len: return s return s[:output_len] @staticmethod def human_readable_filesize(b): """ Returns filesize in a human readable format. """ thresh = 1024.0 if b < thresh: return "{:.1f} B".format(b) units = ("KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB") u = 0 b /= thresh while b >= thresh: b /= thresh u += 1 return "{:.1f} {}".format(b, units[u]) @staticmethod def format_seconds(seconds): """Return a human-readable string of the format 1d2h3m4s""" days, seconds = divmod(seconds, 86400) hours, seconds = divmod(seconds, 3600) minutes, seconds = divmod(seconds, 60) human_readable = [] if days: human_readable.append("{:.0f}d".format(days)) if hours: human_readable.append("{:.0f}h".format(hours)) if minutes: human_readable.append("{:.0f}m".format(minutes)) if seconds or not human_readable: human_readable.append("{:.0f}s".format(seconds)) return "".join(human_readable) @staticmethod def estimated_time_remaining(bytes_downloaded, total_bytes, started): now = time.time() time_elapsed = now - started # in seconds download_rate = bytes_downloaded / time_elapsed remaining_bytes = total_bytes - bytes_downloaded eta = remaining_bytes / download_rate return Common.format_seconds(eta) @staticmethod def get_available_port(min_port, max_port): """ Find a random available port within the given range. """ with socket.socket() as tmpsock: while True: try: tmpsock.bind(("127.0.0.1", random.randint(min_port, max_port))) break except OSError: pass _, port = tmpsock.getsockname() return port @staticmethod def dir_size(start_path): """ Calculates the total size, in bytes, of all of the files in a directory. """ total_size = 0 for dirpath, dirnames, filenames in os.walk(start_path): for f in filenames: fp = os.path.join(dirpath, f) if not os.path.islink(fp): total_size += os.path.getsize(fp) return total_size class AutoStopTimer(threading.Thread): """ Background thread sleeps t hours and returns. """ def __init__(self, common, time): threading.Thread.__init__(self) self.common = common self.setDaemon(True) self.time = time def run(self): self.common.log( "AutoStopTimer", f"Server will shut down after {self.time} seconds" ) time.sleep(self.time) return 1 onionshare-2.6.3/cli/onionshare_cli/meek.py000066400000000000000000000150511475545702100207410ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import subprocess import time class Meek(object): """ The Meek object starts the meek-client as a subprocess. This process is used to do domain-fronting to connect to the Tor APIs for censorship circumvention and retrieving bridges, before connecting to Tor. """ def __init__(self, common, get_tor_paths=None): """ Set up the Meek object """ self.common = common self.common.log("Meek", "__init__") # Set the path of the meek binary if not get_tor_paths: get_tor_paths = self.common.get_tor_paths ( self.tor_path, self.tor_geo_ip_file_path, self.tor_geo_ipv6_file_path, self.obfs4proxy_file_path, self.snowflake_file_path, self.meek_client_file_path, ) = get_tor_paths() self.meek_proxies = {} self.meek_url = "https://1723079976.rsc.cdn77.org/" self.meek_front = "www.phpmyadmin.net" self.meek_env = { "TOR_PT_MANAGED_TRANSPORT_VER": "1", "TOR_PT_CLIENT_TRANSPORTS": "meek", } self.meek_host = "127.0.0.1" self.meek_port = None def start(self): """ Start the Meek Client and populate the SOCKS proxies dict for use with requests to the Tor Moat API. """ # Abort early if we can't find the Meek client if self.meek_client_file_path is None or not os.path.exists( self.meek_client_file_path ): raise MeekNotFound(self.common) # Start the Meek Client as a subprocess. self.common.log("Meek", "start", "Starting meek client") if self.common.platform == "Windows": env = os.environ.copy() for key in self.meek_env: env[key] = self.meek_env[key] # In Windows, hide console window when opening meek-client.exe subprocess startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW self.meek_proc = subprocess.Popen( [ self.meek_client_file_path, "--url", self.meek_url, "--front", self.meek_front, ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo, bufsize=1, env=env, text=True, ) else: self.meek_proc = subprocess.Popen( [ self.meek_client_file_path, "--url", self.meek_url, "--front", self.meek_front, ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=1, env=self.meek_env, # Using universal_newlines instead of text because the snap package using python < 3.7 universal_newlines=True, ) # Obtain the host and port that meek is running on for line in iter(self.meek_proc.stdout.readline, b""): if "CMETHOD meek socks5" in line: self.meek_host = line.split(" ")[3].split(":")[0] self.meek_port = line.split(" ")[3].split(":")[1] self.common.log( "Meek", "start", f"Meek running on {self.meek_host}:{self.meek_port}", ) break if "CMETHOD-ERROR" in line: self.cleanup() raise MeekNotRunning(self.common, line) break if self.meek_port: self.meek_proxies = { "http": f"socks5h://{self.meek_host}:{self.meek_port}", "https": f"socks5h://{self.meek_host}:{self.meek_port}", } else: self.cleanup() raise MeekNotRunning(self.common, "Could not obtain the meek port") def cleanup(self): """ Kill any meek subprocesses. """ self.common.log("Meek", "cleanup") if self.meek_proc: self.meek_proc.terminate() time.sleep(0.2) if self.meek_proc.poll() is None: self.common.log( "Meek", "cleanup", "Tried to terminate meek-client process but it's still running", ) try: self.meek_proc.kill() time.sleep(0.2) if self.meek_proc.poll() is None: self.common.log( "Meek", "cleanup", "Tried to kill meek-client process but it's still running", ) except Exception: self.common.log( "Meek", "cleanup", "Exception while killing meek-client process" ) self.meek_proc = None # Reset other Meek settings self.meek_proxies = {} self.meek_port = None class MeekNotRunning(Exception): """ We were unable to start Meek or obtain the port number it started on, in order to do domain fronting. """ def __init__(self, common, info=None): self.common = common msg = "Meek experienced an error starting up" if info: msg = msg + f": {info}" self.common.log("MeekNotRunning", "__init__", msg) class MeekNotFound(Exception): """ We were unable to find the Meek Client binary. """ def __init__(self, common): self.common = common self.common.log("MeekNotFound", "__init__", "Could not find the meek binary") onionshare-2.6.3/cli/onionshare_cli/mode_settings.py000066400000000000000000000126321475545702100226660ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import json import platform if platform.system() == "Darwin": import pwd class ModeSettings: """ This stores the settings for a single instance of an OnionShare mode. In CLI there is only one ModeSettings, and in the GUI there is a separate ModeSettings for each tab """ def __init__(self, common, filename=None, id=None): self.common = common self.default_settings = { "onion": { "private_key": None, "client_auth_priv_key": None, "client_auth_pub_key": None, }, "persistent": { "mode": None, "enabled": False, "autostart_on_launch": False }, "general": { "title": None, "public": False, "autostart_timer": False, "autostop_timer": False, "service_id": None, }, "share": { "autostop_sharing": True, "filenames": [], "log_filenames": False, }, "receive": { "data_dir": self.build_default_receive_data_dir(), "webhook_url": None, "disable_text": False, "disable_files": False, }, "website": { "disable_csp": False, "custom_csp": None, "log_filenames": False, "filenames": [] }, "chat": {}, } self._settings = {} self.just_created = False if id: self.id = id else: self.id = self.common.build_password(3) self.load(filename) def fill_in_defaults(self): """ If there are any missing settings from self._settings, replace them with their default values. """ for key in self.default_settings: if key in self._settings: for inner_key in self.default_settings[key]: if inner_key not in self._settings[key]: self._settings[key][inner_key] = self.default_settings[key][ inner_key ] else: self._settings[key] = self.default_settings[key] def get(self, group, key): return self._settings[group][key] def set(self, group, key, val): self._settings[group][key] = val self.common.log( "ModeSettings", "set", f"updating {self.id}: {group}.{key} = {val}" ) self.save() def build_default_receive_data_dir(self): """ Returns the path of the default Downloads directory for receive mode. """ if self.common.platform == "Darwin": # We can't use os.path.expanduser() in macOS because in the sandbox it # returns the path to the sandboxed homedir real_homedir = pwd.getpwuid(os.getuid()).pw_dir return os.path.join(real_homedir, "OnionShare") elif self.common.platform == "Windows": # On Windows, os.path.expanduser() needs to use backslash, or else it # retains the forward slash, which breaks opening the folder in explorer. return os.path.expanduser("~\\OnionShare") else: # All other OSes return os.path.expanduser("~/OnionShare") def load(self, filename=None): # Load persistent settings from disk. If the file doesn't exist, create it if filename: self.filename = filename else: self.filename = os.path.join( self.common.build_persistent_dir(), f"{self.id}.json" ) if os.path.exists(self.filename): try: with open(self.filename, "r") as f: self._settings = json.load(f) self.fill_in_defaults() self.common.log("ModeSettings", "load", f"loaded {self.filename}") return except Exception: pass # If loading settings didn't work, create the settings file self.common.log("ModeSettings", "load", f"creating {self.filename}") self.fill_in_defaults() self.just_created = True def save(self): # Save persistent setting to disk if not self.get("persistent", "enabled"): return if self.filename: with open(self.filename, "w") as file: file.write(json.dumps(self._settings, indent=2)) def delete(self): # Delete the file from disk if os.path.exists(self.filename): os.remove(self.filename) onionshare-2.6.3/cli/onionshare_cli/onion.py000066400000000000000000001136601475545702100211470ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from .censorship import CensorshipCircumvention from .meek import Meek from stem.control import Controller from stem import ProtocolError, SocketClosed from stem.connection import MissingPassword, UnreadableCookieFile, AuthenticationFailure import base64 import nacl.public import os import psutil import re import shlex import subprocess import tempfile import time import traceback from packaging.version import Version class TorErrorAutomatic(Exception): """ OnionShare is failing to connect and authenticate to the Tor controller, using automatic settings that should work with Tor Browser. """ class TorErrorInvalidSetting(Exception): """ This exception is raised if the settings just don't make sense. """ class TorErrorSocketPort(Exception): """ OnionShare can't connect to the Tor controller using the supplied address and port. """ class TorErrorSocketFile(Exception): """ OnionShare can't connect to the Tor controller using the supplied socket file. """ class TorErrorMissingPassword(Exception): """ OnionShare connected to the Tor controller, but it requires a password. """ class TorErrorUnreadableCookieFile(Exception): """ OnionShare connected to the Tor controller, but your user does not have permission to access the cookie file. """ class TorErrorAuthError(Exception): """ OnionShare connected to the address and port, but can't authenticate. It's possible that a Tor controller isn't listening on this port. """ class TorErrorProtocolError(Exception): """ This exception is raised if onionshare connects to the Tor controller, but it isn't acting like a Tor controller (such as in Whonix). """ class TorTooOldEphemeral(Exception): """ This exception is raised if the version of tor doesn't support ephemeral onion services """ class TorTooOldStealth(Exception): """ This exception is raised if the version of tor doesn't support stealth onion services """ class BundledTorTimeout(Exception): """ This exception is raised if onionshare is set to use the bundled Tor binary, but Tor doesn't finish connecting promptly. """ class BundledTorCanceled(Exception): """ This exception is raised if onionshare is set to use the bundled Tor binary, and the user cancels connecting to Tor """ class BundledTorBroken(Exception): """ This exception is raised if onionshare is set to use the bundled Tor binary, but the process seems to fail to run. """ class PortNotAvailable(Exception): """ There are no available ports for OnionShare to use, which really shouldn't ever happen """ class Onion(object): """ Onion is an abstraction layer for connecting to the Tor control port and creating onion services. OnionShare supports creating onion services by connecting to the Tor controller and using ADD_ONION, DEL_ONION. stealth: Should the onion service be stealth? settings: A Settings object. If it's not passed in, load from disk. bundled_connection_func: If the tor connection type is bundled, optionally call this function and pass in a status string while connecting to tor. This is necessary for status updates to reach the GUI. """ def __init__(self, common, use_tmp_dir=False, get_tor_paths=None): self.common = common self.common.log("Onion", "__init__") self.use_tmp_dir = use_tmp_dir # Set the path of the tor binary, for bundled tor if not get_tor_paths: get_tor_paths = self.common.get_tor_paths ( self.tor_path, self.tor_geo_ip_file_path, self.tor_geo_ipv6_file_path, self.obfs4proxy_file_path, self.snowflake_file_path, self.meek_client_file_path, ) = get_tor_paths() # The tor process self.tor_proc = None # The Tor controller self.c = None # Start out not connected to Tor self.connected_to_tor = False # Assigned later if we are using stealth mode self.auth_string = None # Keep track of onions where it's important to gracefully close to prevent truncated downloads self.graceful_close_onions = [] def key_str(self, key): """ Returns a base32 decoded string of a key. """ # bytes to base 32 key_bytes = bytes(key) key_b32 = base64.b32encode(key_bytes) # strip trailing ==== assert key_b32[-4:] == b"====" key_b32 = key_b32[:-4] # change from b'ASDF' to ASDF s = key_b32.decode("utf-8") return s def connect( self, custom_settings=None, config=None, tor_status_update_func=None, connect_timeout=120, local_only=False, ): if local_only: self.common.log( "Onion", "connect", "--local-only, so skip trying to connect" ) return # Either use settings that are passed in, or use them from common if custom_settings: self.settings = custom_settings elif config: self.common.load_settings(config) self.settings = self.common.settings else: self.common.load_settings() self.settings = self.common.settings self.common.log( "Onion", "connect", f"connection_type={self.settings.get('connection_type')}", ) # The Tor controller self.c = None if self.settings.get("connection_type") == "bundled": # Create a torrc for this session if self.use_tmp_dir: self.tor_data_directory = tempfile.TemporaryDirectory( dir=self.common.build_tmp_dir() ) self.tor_data_directory_name = self.tor_data_directory.name else: self.tor_data_directory_name = self.common.build_tor_dir() self.common.log( "Onion", "connect", f"tor_data_directory_name={self.tor_data_directory_name}", ) # Create the torrc with open(self.common.get_resource_path("torrc_template")) as f: torrc_template = f.read() self.tor_cookie_auth_file = os.path.join( self.tor_data_directory_name, "cookie" ) try: self.tor_socks_port = self.common.get_available_port(1000, 65535) except Exception: print("OnionShare port not available") raise PortNotAvailable() self.tor_torrc = os.path.join(self.tor_data_directory_name, "torrc") # If there is an existing OnionShare tor process, kill it for proc in psutil.process_iter(["pid", "name", "username"]): try: cmdline = proc.cmdline() if ( cmdline[0] == self.tor_path and cmdline[1] == "-f" and cmdline[2] == self.tor_torrc ): self.common.log( "Onion", "connect", "found a stale tor process, killing it" ) proc.terminate() proc.wait() break except Exception: pass if self.common.platform == "Windows" or self.common.platform == "Darwin": # Windows doesn't support unix sockets, so it must use a network port. # macOS can't use unix sockets either because socket filenames are limited to # 100 chars, and the macOS sandbox forces us to put the socket file in a place # with a really long path. torrc_template += "ControlPort {{control_port}}\n" try: self.tor_control_port = self.common.get_available_port(1000, 65535) except Exception: print("OnionShare port not available") raise PortNotAvailable() self.tor_control_socket = None else: # Linux and BSD can use unix sockets torrc_template += "ControlSocket {{control_socket}}\n" self.tor_control_port = None self.tor_control_socket = os.path.join( self.tor_data_directory_name, "control_socket" ) torrc_template = torrc_template.replace( "{{data_directory}}", self.tor_data_directory_name ) torrc_template = torrc_template.replace( "{{control_port}}", str(self.tor_control_port) ) torrc_template = torrc_template.replace( "{{control_socket}}", str(self.tor_control_socket) ) torrc_template = torrc_template.replace( "{{cookie_auth_file}}", self.tor_cookie_auth_file ) torrc_template = torrc_template.replace( "{{geo_ip_file}}", self.tor_geo_ip_file_path ) torrc_template = torrc_template.replace( "{{geo_ipv6_file}}", self.tor_geo_ipv6_file_path ) torrc_template = torrc_template.replace( "{{socks_port}}", str(self.tor_socks_port) ) torrc_template = torrc_template.replace( "{{obfs4proxy_path}}", str(self.obfs4proxy_file_path) ) torrc_template = torrc_template.replace( "{{snowflake_path}}", str(self.snowflake_file_path) ) with open(self.tor_torrc, "w") as f: self.common.log("Onion", "connect", "Writing torrc template file") f.write(torrc_template) # Bridge support if self.settings.get("bridges_enabled"): f.write("\nUseBridges 1\n") if self.settings.get("bridges_type") == "built-in": use_torrc_bridge_templates = False builtin_bridge_type = self.settings.get("bridges_builtin_pt") # Use built-inbridges stored in settings, if they are there already. # They are probably newer than that of our hardcoded copies. if self.settings.get("bridges_builtin"): try: for line in self.settings.get("bridges_builtin")[ builtin_bridge_type ]: if line.strip() != "": f.write(f"Bridge {line}\n") self.common.log( "Onion", "connect", "Wrote in the built-in bridges from OnionShare settings", ) except KeyError: # Somehow we had built-in bridges in our settings, but # not for this bridge type. Fall back to using the hard- # coded templates. use_torrc_bridge_templates = True else: use_torrc_bridge_templates = True if use_torrc_bridge_templates: if builtin_bridge_type == "obfs4": with open( self.common.get_resource_path( "torrc_template-obfs4" ) ) as o: f.write(o.read()) elif builtin_bridge_type == "meek-azure": with open( self.common.get_resource_path( "torrc_template-meek_lite_azure" ) ) as o: f.write(o.read()) elif builtin_bridge_type == "snowflake": with open( self.common.get_resource_path( "torrc_template-snowflake" ) ) as o: f.write(o.read()) self.common.log( "Onion", "connect", "Wrote in the built-in bridges from torrc templates", ) elif self.settings.get("bridges_type") == "moat": for line in self.settings.get("bridges_moat").split("\n"): if line.strip() != "": f.write(f"Bridge {line}\n") elif self.settings.get("bridges_type") == "custom": for line in self.settings.get("bridges_custom").split("\n"): if line.strip() != "": f.write(f"Bridge {line}\n") # Execute a tor subprocess self.common.log("Onion", "connect", f"starting {self.tor_path} subprocess") start_ts = time.time() if self.common.platform == "Windows": # In Windows, hide console window when opening tor.exe subprocess startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW self.tor_proc = subprocess.Popen( [self.tor_path, "-f", self.tor_torrc], stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo, ) else: if self.common.is_snapcraft(): env = None else: env = {"LD_LIBRARY_PATH": os.path.dirname(self.tor_path)} self.tor_proc = subprocess.Popen( [self.tor_path, "-f", self.tor_torrc], stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env, ) # Wait for the tor controller to start self.common.log("Onion", "connect", f"tor pid: {self.tor_proc.pid}") time.sleep(2) return_code = self.tor_proc.poll() if return_code != None: self.common.log("Onion", "connect", f"tor process has terminated early: {return_code}") # Connect to the controller self.common.log("Onion", "connect", "authenticating to tor controller") try: if ( self.common.platform == "Windows" or self.common.platform == "Darwin" ): self.c = Controller.from_port(port=self.tor_control_port) self.c.authenticate() else: self.c = Controller.from_socket_file(path=self.tor_control_socket) self.c.authenticate() except Exception as e: print("OnionShare could not connect to Tor:\n{}".format(e.args[0])) print(traceback.format_exc()) raise BundledTorBroken(e.args[0]) while True: try: res = self.c.get_info("status/bootstrap-phase") except SocketClosed: raise BundledTorCanceled() res_parts = shlex.split(res) progress = res_parts[2].split("=")[1] summary = res_parts[4].split("=")[1] # "\033[K" clears the rest of the line print( f"\rConnecting to the Tor network: {progress}% - {summary}\033[K", end="", ) if callable(tor_status_update_func): if not tor_status_update_func(progress, summary): # If the dialog was canceled, stop connecting to Tor self.common.log( "Onion", "connect", "tor_status_update_func returned false, canceling connecting to Tor", ) print() return False if summary == "Done": print("") break time.sleep(0.2) # If using bridges, it might take a bit longer to connect to Tor if self.settings.get("bridges_enabled"): # Only override timeout if a custom timeout has not been passed in if connect_timeout == 120: connect_timeout = 150 if time.time() - start_ts > connect_timeout: print("") try: self.tor_proc.terminate() print( "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?" ) raise BundledTorTimeout() except FileNotFoundError: pass elif self.settings.get("connection_type") == "automatic": # Automatically try to guess the right way to connect to Tor Browser automatic_error = "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?" # Try connecting to control port found_tor = False # If the TOR_CONTROL_PORT environment variable is set, use that env_port = os.environ.get("TOR_CONTROL_PORT") if env_port: try: self.c = Controller.from_port(port=int(env_port)) found_tor = True except Exception: pass else: # Otherwise, try default ports for Tor Browser, Tor Messenger, and system tor try: ports = [9151, 9153, 9051] for port in ports: self.c = Controller.from_port(port=port) found_tor = True except Exception: pass # If this still didn't work, try guessing the default socket file path socket_file_path = "" if not found_tor: try: if self.common.platform == "Darwin": socket_file_path = os.path.expanduser( "~/Library/Application Support/TorBrowser-Data/Tor/control.socket" ) self.c = Controller.from_socket_file(path=socket_file_path) found_tor = True except Exception: pass # If connecting to default control ports failed, so let's try # guessing the socket file name next if not found_tor: try: if self.common.platform == "Linux" or self.common.platform == "BSD": socket_file_path = ( f"/run/user/{os.geteuid()}/Tor/control.socket" ) elif self.common.platform == "Darwin": socket_file_path = ( f"/run/user/{os.geteuid()}/Tor/control.socket" ) elif self.common.platform == "Windows": # Windows doesn't support unix sockets print(automatic_error) raise TorErrorAutomatic() self.c = Controller.from_socket_file(path=socket_file_path) except Exception: print(automatic_error) raise TorErrorAutomatic() # Try authenticating try: self.c.authenticate() except Exception: print(automatic_error) raise TorErrorAutomatic() else: # Use specific settings to connect to tor invalid_settings_error = "Can't connect to Tor controller because your settings don't make sense." # Try connecting try: if self.settings.get("connection_type") == "control_port": self.c = Controller.from_port( address=self.settings.get("control_port_address"), port=self.settings.get("control_port_port"), ) elif self.settings.get("connection_type") == "socket_file": self.c = Controller.from_socket_file( path=self.settings.get("socket_file_path") ) else: print(invalid_settings_error) raise TorErrorInvalidSetting() except Exception: if self.settings.get("connection_type") == "control_port": print( "Can't connect to the Tor controller at {}:{}.".format( self.settings.get("control_port_address"), self.settings.get("control_port_port"), ) ) raise TorErrorSocketPort( self.settings.get("control_port_address"), self.settings.get("control_port_port"), ) print( "Can't connect to the Tor controller using socket file {}.".format( self.settings.get("socket_file_path") ) ) raise TorErrorSocketFile(self.settings.get("socket_file_path")) # Try authenticating try: if self.settings.get("auth_type") == "no_auth": self.c.authenticate() elif self.settings.get("auth_type") == "password": self.c.authenticate(self.settings.get("auth_password")) else: print(invalid_settings_error) raise TorErrorInvalidSetting() except MissingPassword: print( "Connected to Tor controller, but it requires a password to authenticate." ) raise TorErrorMissingPassword() except UnreadableCookieFile: print( "Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file." ) raise TorErrorUnreadableCookieFile() except AuthenticationFailure: print( "Connected to {}:{}, but can't authenticate. Maybe this isn't a Tor controller?".format( self.settings.get("control_port_address"), self.settings.get("control_port_port"), ) ) raise TorErrorAuthError( self.settings.get("control_port_address"), self.settings.get("control_port_port"), ) # If we made it this far, we should be connected to Tor self.connected_to_tor = True # Get the tor version self.tor_version = self.c.get_version().version_str self.common.log("Onion", "connect", f"Connected to tor {self.tor_version}") # Do the versions of stem and tor that I'm using support ephemeral onion services? list_ephemeral_hidden_services = getattr( self.c, "list_ephemeral_hidden_services", None ) self.supports_ephemeral = ( callable(list_ephemeral_hidden_services) and self.tor_version >= "0.2.7.1" ) # Do the versions of stem and tor that I'm using support v3 stealth onion services? try: res = self.c.create_ephemeral_hidden_service( {1: 1}, basic_auth=None, await_publication=False, key_type="NEW", key_content="ED25519-V3", client_auth_v3="E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA", ) tmp_service_id = res.service_id self.c.remove_ephemeral_hidden_service(tmp_service_id) self.supports_stealth = True except Exception: # ephemeral stealth onion services are not supported self.supports_stealth = False # Does this version of Tor support next-gen ('v3') onions? # Note, this is the version of Tor where this bug was fixed: # https://trac.torproject.org/projects/tor/ticket/28619 cleaned_tor_version = re.sub(r"\s*\(.*\)", "", self.tor_version) self.supports_v3_onions = Version(cleaned_tor_version) >= Version("0.3.5.7") # Now that we are connected to Tor, if we are using built-in bridges, # update them with the latest copy available from the Tor API if ( self.settings.get("bridges_enabled") and self.settings.get("bridges_type") == "built-in" ): self.update_builtin_bridges() def is_authenticated(self): """ Returns True if the Tor connection is still working, or False otherwise. """ if self.c is not None: return self.c.is_authenticated() else: return False def start_onion_service(self, mode, mode_settings, port, await_publication): """ Start a onion service on port 80, pointing to the given port, and return the onion hostname. """ self.common.log("Onion", "start_onion_service", f"port={port}") if not self.supports_ephemeral: print( "Your version of Tor is too old, ephemeral onion services are not supported" ) raise TorTooOldEphemeral() if mode_settings.get("onion", "private_key"): key_content = mode_settings.get("onion", "private_key") key_type = "ED25519-V3" else: key_content = "ED25519-V3" key_type = "NEW" debug_message = f"key_type={key_type}" if key_type == "NEW": debug_message += f", key_content={key_content}" self.common.log("Onion", "start_onion_service", debug_message) if mode_settings.get("general", "public"): client_auth_priv_key = None client_auth_pub_key = None else: if not self.supports_stealth: print( "Your version of Tor is too old, stealth onion services are not supported" ) raise TorTooOldStealth() else: if key_type == "NEW" or not mode_settings.get( "onion", "client_auth_priv_key" ): # Generate a new key pair for Client Auth on new onions, or if # it's a persistent onion but for some reason we don't them client_auth_priv_key_raw = nacl.public.PrivateKey.generate() client_auth_priv_key = self.key_str(client_auth_priv_key_raw) client_auth_pub_key = self.key_str( client_auth_priv_key_raw.public_key ) else: # These should have been saved in settings from the previous run of a persistent onion client_auth_priv_key = mode_settings.get( "onion", "client_auth_priv_key" ) client_auth_pub_key = mode_settings.get( "onion", "client_auth_pub_key" ) try: if not self.supports_stealth: res = self.c.create_ephemeral_hidden_service( {80: port}, await_publication=await_publication, basic_auth=None, key_type=key_type, key_content=key_content, ) else: res = self.c.create_ephemeral_hidden_service( {80: port}, await_publication=await_publication, basic_auth=None, key_type=key_type, key_content=key_content, client_auth_v3=client_auth_pub_key, ) except ProtocolError as e: print("Tor error: {}".format(e.args[0])) raise TorErrorProtocolError(e.args[0]) onion_host = res.service_id + ".onion" # Gracefully close share mode rendezvous circuits if mode == "share": self.graceful_close_onions.append(res.service_id) # Save the service_id mode_settings.set("general", "service_id", res.service_id) # Save the private key and hidservauth string if not mode_settings.get("onion", "private_key"): mode_settings.set("onion", "private_key", res.private_key) # If using V3 onions and Client Auth, save both the private and public key # because we need to send the public key to ADD_ONION (if we restart this # same share at a later date), and the private key to the other user for # their Tor Browser. if not mode_settings.get("general", "public"): mode_settings.set("onion", "client_auth_priv_key", client_auth_priv_key) mode_settings.set("onion", "client_auth_pub_key", client_auth_pub_key) # If we were pasting the client auth directly into the filesystem behind a Tor client, # it would need to be in the format below. However, let's just set the private key # by itself, as this can be pasted directly into Tor Browser, which is likely to # be the most common use case. # self.auth_string = f"{onion_host}:x25519:{client_auth_priv_key}" self.auth_string = client_auth_priv_key return onion_host def stop_onion_service(self, mode_settings): """ Stop a specific onion service """ onion_host = mode_settings.get("general", "service_id") if onion_host: self.common.log("Onion", "stop_onion_service", f"onion host: {onion_host}") try: self.c.remove_ephemeral_hidden_service( mode_settings.get("general", "service_id") ) except Exception: self.common.log( "Onion", "stop_onion_service", f"failed to remove {onion_host}" ) def cleanup(self, stop_tor=True, wait=True): """ Stop onion services that were created earlier. If there's a tor subprocess running, kill it. """ self.common.log("Onion", "cleanup") # Cleanup the ephemeral onion services, if we have any try: onions = self.c.list_ephemeral_hidden_services() for service_id in onions: onion_host = f"{service_id}.onion" try: self.common.log( "Onion", "cleanup", f"trying to remove onion {onion_host}" ) self.c.remove_ephemeral_hidden_service(service_id) except Exception: self.common.log( "Onion", "cleanup", f"failed to remove onion {onion_host}" ) pass except Exception: pass if stop_tor: # Stop tor process if self.tor_proc: if wait: # Wait for Tor rendezvous circuits to close # Catch exceptions to prevent crash on Ctrl-C try: rendezvous_circuit_ids = [] for c in self.c.get_circuits(): if ( c.purpose == "HS_SERVICE_REND" and c.rend_query in self.graceful_close_onions ): rendezvous_circuit_ids.append(c.id) symbols = list("\\|/-") symbols_i = 0 while True: num_rend_circuits = 0 for c in self.c.get_circuits(): if c.id in rendezvous_circuit_ids: num_rend_circuits += 1 if num_rend_circuits == 0: print( "\rTor rendezvous circuits have closed" + " " * 20 ) break if num_rend_circuits == 1: circuits = "circuit" else: circuits = "circuits" print( f"\rWaiting for {num_rend_circuits} Tor rendezvous {circuits} to close {symbols[symbols_i]} ", end="", ) symbols_i = (symbols_i + 1) % len(symbols) time.sleep(1) except Exception: pass self.tor_proc.terminate() time.sleep(0.2) if self.tor_proc.poll() is None: self.common.log( "Onion", "cleanup", "Tried to terminate tor process but it's still running", ) try: self.tor_proc.kill() time.sleep(0.2) if self.tor_proc.poll() is None: self.common.log( "Onion", "cleanup", "Tried to kill tor process but it's still running", ) except Exception: self.common.log( "Onion", "cleanup", "Exception while killing tor process" ) self.tor_proc = None # Reset other Onion settings self.connected_to_tor = False try: # Delete the temporary tor data directory if self.use_tmp_dir: self.tor_data_directory.cleanup() except Exception: pass def get_tor_socks_port(self): """ Returns a (address, port) tuple for the Tor SOCKS port """ self.common.log("Onion", "get_tor_socks_port") if self.settings.get("connection_type") == "bundled": return ("127.0.0.1", self.tor_socks_port) elif self.settings.get("connection_type") == "automatic": return ("127.0.0.1", 9150) else: return (self.settings.get("socks_address"), self.settings.get("socks_port")) def update_builtin_bridges(self): """ Use the CensorshipCircumvention API to fetch the latest built-in bridges and update them in settings. """ builtin_bridges = False meek = None # Try obtaining bridges over Tor, if we're connected to it. if self.is_authenticated: self.common.log( "Onion", "update_builtin_bridges", "Updating the built-in bridges. Trying over Tor first", ) self.censorship_circumvention = CensorshipCircumvention( self.common, None, self ) builtin_bridges = self.censorship_circumvention.request_builtin_bridges() if not builtin_bridges: # Tor was not running or it failed to hit the Tor API. # Fall back to using Meek (domain-fronting). self.common.log( "Onion", "update_builtin_bridges", "Updating the built-in bridges. Trying via Meek (no Tor)", ) meek = Meek(self.common) meek.start() self.censorship_circumvention = CensorshipCircumvention( self.common, meek, None ) builtin_bridges = self.censorship_circumvention.request_builtin_bridges() meek.cleanup() if builtin_bridges: # If we got to this point, we have bridges self.common.log( "Onion", "update_builtin_bridges", f"Obtained bridges: {builtin_bridges}", ) # Save the new settings self.settings.set("bridges_builtin", builtin_bridges) self.settings.save() else: self.common.log( "Onion", "update_builtin_bridges", "Error getting built-in bridges" ) return False onionshare-2.6.3/cli/onionshare_cli/onionshare.py000066400000000000000000000054461475545702100221740ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os from .common import AutoStopTimer class OnionShare(object): """ OnionShare is the main application class. Pass in options and run start_onion_service and it will do the magic. """ def __init__(self, common, onion, local_only=False, autostop_timer=0): self.common = common self.common.log("OnionShare", "__init__") # The Onion object self.onion = onion self.hidserv_dir = None self.onion_host = None self.port = None # do not use tor -- for development self.local_only = local_only # optionally shut down after N hours self.autostop_timer = autostop_timer # init auto-stop timer thread self.autostop_timer_thread = None def choose_port(self): """ Choose a random port. """ try: self.port = self.common.get_available_port(17600, 17650) except Exception: raise OSError("Cannot find an available OnionShare port") def start_onion_service(self, mode, mode_settings, await_publication=True): """ Start the onionshare onion service. """ self.common.log("OnionShare", "start_onion_service") if not self.port: self.choose_port() if self.autostop_timer > 0: self.autostop_timer_thread = AutoStopTimer(self.common, self.autostop_timer) if self.local_only: self.onion_host = f"127.0.0.1:{self.port}" if not mode_settings.get("general", "public"): self.auth_string = ( "E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA" ) return self.onion_host = self.onion.start_onion_service( mode, mode_settings, self.port, await_publication ) if not mode_settings.get("general", "public"): self.auth_string = self.onion.auth_string def stop_onion_service(self, mode_settings): """ Stop the onion service """ self.onion.stop_onion_service(mode_settings) onionshare-2.6.3/cli/onionshare_cli/resources/000077500000000000000000000000001475545702100214565ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/resources/static/000077500000000000000000000000001475545702100227455ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/resources/static/css/000077500000000000000000000000001475545702100235355ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/resources/static/css/style.css000066400000000000000000000151101475545702100254050ustar00rootroot00000000000000.clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } body { margin: 0; font-family: Helvetica, sans-serif; background-color: #fafafa; } .d-flex { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; } header { border-bottom: 1px solid rgba(0, 0, 0, 0.1); background: #fff; padding: 1rem; } header .logo { vertical-align: middle; width: 3rem; height: 3rem; } header h1 { display: inline-block; margin: 0 0 0 0.5rem; vertical-align: middle; font-weight: normal; font-size: 1.375rem; color: #333; position: relative; top: .125rem; } header .information { font-size: .875rem; } .button { color: #ffffff; background-color: #4e064f; padding: .875rem 1rem; border: 0; border-radius: .25rem; text-decoration: none; margin-left: 1rem; cursor: pointer; font-weight: bold; } a.button:visited { color: #ffffff; } .close-button { color: #ffffff; background-color: #c90c0c; padding: 10px; border: 0; border-radius: 5px; text-decoration: none; margin-left: 1rem; cursor: pointer; position: absolute; right: 10px; bottom: 10px; } ul.breadcrumbs { display: block; list-style: none; margin: 10px 0; padding: 0; } ul.breadcrumbs li { display: inline-block; list-style: none; margin: 0; padding: 5px; color: #999999; } ul.breadcrumbs li span.sep { padding-left: 5px; } ul.breadcrumbs li a:link, ul.breadcrumbs li a:visited { color: #666666; border-bottom: 1px solid #666666; } .file-list { width: 100%; margin: 0 auto; border-collapse: collapse; font-size: .875rem; color: #333; background-color: #fff; } .file-list .heading { text-align: left; text-transform: uppercase; font-weight: normal; color: #666666; padding: 0.75rem; font-size: .75rem; letter-spacing: .0625rem; } .file-list div.d-flex { border-bottom: 1px solid #e0e0e0; justify-content: flex-start; } .file-list div.d-flex div { white-space: nowrap; padding: .625rem .75rem; } .file-list div.d-flex div img { vertical-align: middle; margin-right: 0.5rem; width: 1.25rem; height: 1.25rem; } .file-list div.d-flex div:last-child { padding-right: 0.75rem; flex-basis: 0; flex-grow: 1; } .file-list div.d-flex div:first-child { flex-basis: 0; flex-grow: 2; } @media (max-width: 950px) { .file-list div.d-flex div:last-child { flex-basis: auto; flex-grow: 0; } } @media (max-width: 655px) { .header { padding: 0 1rem; } .file-list { font-size: .9375rem; } .file-list div.d-flex { display: block; } .file-list div.d-flex span { max-width: 100%; word-break: break-all; white-space: normal; vertical-align: top; } .file-list div.d-flex #size-header { display: none; } .file-list div.d-flex div:last-child { padding-left: 3.75rem; font-size: 0.75rem; padding-top: 0; margin-top: -.5rem; color: #666; } .d-flex .row div:first-of-type { padding-bottom: 0; } } @media (max-width: 500px) { header .information { width: 100%; align-items: end; } .file-list div.d-flex div { white-space: nowrap; padding: .625rem 1rem; } } .chat-container { display: flex; font-family: monospace; } .chat-users { width: 20%; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 2px; overflow: auto; background: #f2f2f2; margin: 1rem 0 1rem 1rem; } .chat-users .editable-username { display: flex; padding: 1rem; flex-direction: column; } .chat-users .editable-username input { font-family: monospace; font-size: 1em; } .chat-users .editable-username #username-error { color: #c90c0c; margin: 0.5rem; } .chat-users #user-list li { margin-bottom: 1em; } .chat-wrapper { display: flex; flex-direction: column; flex: 1; margin: 1rem 1rem 0 1rem; height: calc(100vh - (65px + 2em)); } .chat-wrapper #chat { border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 2px; flex: 1; overflow: auto; background: #f2f2f2; padding: 0 1rem; } .chat-wrapper .status { font-style: italic; font-size: 0.8em; color: #666666; } .chat-wrapper .username { font-weight: bold; display: block; } .chat-wrapper .message { word-break: break-word; font-weight: normal; display: block; margin-bottom: 0.3em; } .chat-wrapper .chat-form { display: block; margin: 0.2rem 1rem 1rem 0; padding: -0.5em; } .chat-wrapper input#new-message { height: 100%; width: 100%; font-family: monospace; font-size: 1em; } @media (max-width: 992px) { .chat-users .editable-username { display: block; } .chat-users input#username { width: 90%; } } .no-js { display: none; } .upload-wrapper { align-items: center; justify-content: center; min-height: 400px; text-align: center; } .upload-wrapper img.logo { width: 120px; height: 120px; } .upload-wrapper .upload-header { font-size: 30px; font-weight: normal; color: #666666; margin: 0 0 10px 0; } .upload-wrapper .upload-description { color: #666666; margin: 0 0 20px 0; } .upload-wrapper textarea { max-width: 95%; width: 600px; height: 150px; padding: 10px; } div#uploads { width: 800px; max-width: 90%; margin: 0 auto; } div#uploads .upload { border: 1px solid #DDDDDD; margin: 20px 0; padding: 10px; text-align: left; } div#uploads .upload .upload-filename { font-weight: bold; font-family: monospace; font-size: 1.1em; margin-bottom: 5px; } div#uploads .upload .upload-status { color: #999999; font-size: 0.9em; margin-bottom: 5px; } div#uploads .upload input.cancel { color: #d0011b; border: 0; background: none; box-shadow: none; border-radius: 0px; cursor: pointer; font-family: sans-serif; font-size: 12px; text-decoration: none; display: inline-block; float:right; } div#uploads .upload progress { width: 100%; height: 20px; } ul.flashes { list-style: none; margin: 0; padding: 0; width: 800px; max-width: 100%; margin: 0 auto; } ul.flashes li { margin: 0 0 5px 0; padding: 5px; list-style: none; text-align: center; word-break: break-word; } li.error { color: #d0011b; } li.info { color: #5fa416; } .closed-wrapper { display: flex; align-items: center; justify-content: center; min-height: 400px; } .info { text-align: center; } .info img { width: 120px; height: 120px; } .info .info-header { font-size: 30px; font-weight: normal; color: #666666; margin: 0 0 10px 0; } .info .info-description { color: #666666; margin: 0 0 20px 0; } a { text-decoration: none; color: #1c1ca0; } a:visited { color: #601ca0; } onionshare-2.6.3/cli/onionshare_cli/resources/static/img/000077500000000000000000000000001475545702100235215ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/resources/static/img/ajax.gif000066400000000000000000000015171475545702100251370ustar00rootroot00000000000000GIF89aNOtnI0$K7 H,-t*E-``1@C7h/1f\)&!;onionshare-2.6.3/cli/onionshare_cli/resources/static/img/favicon.ico000066400000000000000000000360561475545702100256540ustar00rootroot00000000000000 h6  (00 h&(  H H1M MM MM MM MM MM MJ J088 L LM MN NN NN NN NN NN NM ML L88 88 M MN NN NOOuCulin:nN NN NN NM M88 L LN NN NxGxj4jN NN NL LJ J0M MN N~O~OON NM MN N1M MN NUUg/gN NN Nr?rj4jN NN NN NM MM MRRjh0hN NN NN NN NN NN NPPN NN NM MM McN NN NN NN NN N̹SSN NL LM MN NkOON NN NN NN N̹SSM MM MN NN NvEvOON NN NN NN NYYd+dM MK KN NN NN NQQmQQN NN NWWνSSN NM MH H1M MN NOOƱYN NM MJ J0L LN NN N|aN NN NL L88 M MN NN Nc*c~t[ [N NN NM M88 88 L LM MN NN NN NN NN NN NM ML L88 J J0M MM MM ML LM MM MN N1( @ FFM MYM MM MN NL LL LN NM MM ML LZKKLL(K KM MN NN NN NN NN NN NN NN NN NN NM ML LGG'EE M MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML LEE KK%L LM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML LKK%L L2M MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML L2KK%M MN NN NN NN NN NN NTTY˹vDvOON NN NN NN NN NN NM MKK%EE L LN NN NN NN NN NSS|UN NN NN NN NN NN NL LEE L LM MN NN NN NN Nf/fTTN NN NN NN NM MM MGG'M MN NN NN NN Nk5kͼQQN NN NN NN NM MLL(L LN NN NN NN N[[ϽOON NN NN NN NN NM MKKM MN NN NN NN NZZN NN NN NN Ni2iűPPN NN NN NN NN NN NM MFFL LZN NN NN NN Nl7lzJzN NN NN NN NN NN NN NOOPPN NN NN NN NN NN NN NN NM MYM MN NN NN NN NeN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM MN NPP\!\^$^f-f^#^N NN NN NN NN NN NN NN NN NN NN NOOWWN NN NN NN NN NN NM MM MN Nm8mN NN NN NN NN NN NN NN NN NN NOOd,dN NN NN NN NN NM ML LN NN NUȴSSN NN NN NN NN NN NN NN NN NOOd,dN NN NN NN NL LL LN NN NN NUȴSSN NN NN NN NN NN NN NN NN NOOd,dN NN NN NL LN NN NN NN NN NUȴSSN NN NN NN NN NN NN NN NN NOOd,dN NN NN NM MN NN NN NN NN NUSSN NN NN NN NN NN NN NN NN NN N|L|N NN NM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NayN NN NN NN NM MJ JYN NN NN NN NN NN NN NN NN NWWQQN NN NN NN NN NN NN NN Ne-eb)bN NN NN NN NL LZFFM MN NN NN NN NN NN NN N]"]˸]!]N NN NN NN NN NN NsAsN NN NN NN NM MKKK KN NN NN NN NN NN N]"]yHyc*cg/gX^#^N NN NN NN NL LLL(M MN NN NN NN NSS|L|N NN NN NN NM MGG'M MM MN NN NN NNNSN NN NN NN NM ML LEE L LN NN NN NN NN N\k5kN NN NN NN NN NL LEE KK%M MN NN NN NN NN NVVvʸWOON NN NN NN NN NM MKK%L L2M MN NN NN NN NN NN NN N]"]xGxZWr>rVVN NN NN NN NN NN NN NM ML L2KK%L LM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML LKK%EE L LM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM MEE GG'L LM MN NN NN NN NN NN NN NN NN NN NM MM MLL(KKL LZM MM MN NL LL LM MM MM MM MYFF(0` FFLL(J JOL LM ML LL LL LL LL LM ML LM MJ JRJJ)LL33H H1L LtL LM MM MM MN NN NN NN NN NN NN NN NM MM MM ML LK KvH H5**HH#K KM MM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM ML LL LII&EELLuM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM MJ J{K KII;K KM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML LJJAK KeM MM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM MM MM MmHHK KfL LN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML Lx88 L LhM MM MN NN NN NN NN NN NN NN NN NN NRRd+dvDvU\[Po;o[ [OON NN NN NN NN NN NN NN NN NN NM MM MK KoK KeM MM MN NN NN NN NN NN NN NN NN N`&`xŰWQQN NN NN NN NN NN NN NN NN NM MM MM MmJJ:L LN NN NN NN NN NN NN NN NQQh2hi\!\N NN NN NN NN NN NN NN NN NM MJ JHFFL LM MN NN NN NN NN NN NN NZZwȴ~O~QQN NN NN NN NN NN NN NM MK KGGL LrM MM MN NN NN NN NN NN N[[{RRN NN NN NN NN NN NM MM MJ J{HH#M MN NN NN NN NN NN NN Nb)bϾpPPN NN NN NN NN NN NN NL LJJ)33L LM MN NN NN NN NN NN Na(aɶVVN NN NN NN NN NN NN NM ML LHHHH.L LN NN NN NN NN NN NSSmV]|̻{K{NNN NN NN NN NN NN NN NN NL LJJ:K KiM MN NN NN NN NN NN N{K{pWWN NN NN NN NN NNNe-ecOON NN NN NN NN NN NN NN NN NM MK K:: L LM MN NN NN NN NN NWWg0gN NN NN NN NN NN NN NN NN NRRT`QQN NN NN NN NN NN NN NN NN NN NM ML LCCFFM MN NN NN NN NN NN NpVVN NN NN NN NN NN NN NN NN NN NN NN Nd,dxGxOON NN NN NN NN NN NN NN NN NN NN NN NN NJJ)HHFM MN NN NN NN NN NVVͼZZN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NL LJ JRK KM MN NN NN NN NN Ns@sm8mN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM ML LM MN NN NNN\ \i2ij4j~ŰvDvvDvb)bN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NQQh2hN NN NN NN NN NN NN NN NN NN NL LM MN NN NXXdzN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NYYgQQN NN NN NN NN NN NN NN NM MM MN NN NOO}N}̻f.fN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NWW`NNN NN NN NN NN NN NN NL LL LN NN NN NOOr@rd+dN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NQQiNNN NN NN NN NN NN NL LL LN NN NN NN NN Nr@r]#]N NN NN NN NN NN NN NN NN NN NN NN NN NN NN NYYgQQN NN NN NN NN NL LL LN NN NN NN NN NOO}O}̻f/fN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NWW`NNN NN NN NN NL LL LN NN NN NN NN NN NOOr@rd+dN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NQQiNNN NN NN NM ML LN NN NN NN NN NN NN NN Nr@rϾ]#]N NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN N{k5kN NN NN NM MK KM MN NN NN NN NN NN NN NOOm7m`&`N NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN Nn:n_]`SzIzVVN NN NM ML LIIBM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NTTƱîOON NN NN NN NN NM MI IPH HL LN NN NN NN NN NN NN NN NN NN NN NN NN NNNSSN NN NN NN NN NN NN NN NN NN NN NN NN NPPfTN NN NN NN NN NN NM MFF(:: L LM MN NN NN NN NN NN NN NN NN NN NN NN NvDvf/fN NN NN NN NN NN NN NN NN NN NN NOO[SSN NN NN NN NN NM MK KCCL LgM MN NN NN NN NN NN NN NN NN NN NN NzJzzJzNNN NN NN NN NN NN NN NN NWW~O~N NN NN NN NN NN NM MK KMM+L LN NN NN NN NN NN NN NN NN NOOxHxuDu`&`YYUUVV[[e-eZWWN NN NN NN NN NN NL LH H833L LM MN NN NN NN NN NN NN NN NxGxíɶr?rN NN NN NN NN NN NM ML L**EE!M MN NN NN NN NN NN NN N^#^q>qNNN NN NN NN NN NN NM MGG K KlM MM MN NN NN NN NN NOOxHxN NN NN NN NN NN NM ML LLLuFFM MM MN NN NN NN NN NN NUUs}N}PPN NN NN NN NN NN NM ML LGGH H5M MN NN NN NN NN NN NN NQQl7lʶ|ZZNNN NN NN NN NN NN NN NM MIIBKK^M MM MN NN NN NN NN NN NN NRRZn9nNNN NN NN NN NN NN NN NM MM MK KeL LgM MM MN NN NN NN NN NN NN NN NWWzIzx̺ưgi3iPPN NN NN NN NN NN NN NN NM MM MK Kp33K K_M MN NN NN NN NN NN NN NN NN NN NNNSSWWZZ\ \\ \YYUUQQN NN NN NN NN NN NN NN NN NN NN NM MK KpHHKK^M MM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM ML LK KeII;L LM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM MJJA??K KlM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM MLLrCCFFK KM MM MM MN NN NN NN NN NN NN NN NN NN NN NN NN NN NM MM ML LL LII&33G G2K KsL LM MM MM MN NN NN NN NN NN NN NN NM MM MM ML LM MwI I4HH?? H HHHCK K}L LM MM ML LL LL LM MK KL LIIEFF:: onionshare-2.6.3/cli/onionshare_cli/resources/static/img/logo.png000066400000000000000000000061421475545702100251720ustar00rootroot00000000000000PNG  IHDR``w8 pHYs%%IR$sRGBgAMA a IDATxMlG_ HQbΚH+,-h'"b3K8U%& c;R#h >8H9\#c3y磧I@=^իW2DazFmI3fQo۰WaO* 2(av$3>Ɏ-X"ĠO&QޟYxr=ĠVElh(6S PT[=mn VFQ]p+?г&.=L` pZ;.Eqn(sE'Z8p*)WXu[|>|W/ `sSo'Ql7f^?is7ڨrhCvq̽҈Aֲln1oҜJ iiQL FB:LIDkmVҺꭥ |wRDIܡq/uR&a}Fxz5<8?7LHs>p-54WRCk~iڕ}SS4?>fG J`2)X0;r|ڰm50O2Woaz! Gr.7)@ mvZ6ΏvR˦i ]x´繂gjn޵Y%(`O 뽺07jw}Ӂ"8=">\e jj-%,|`SXjѫ+X RN A (TU( R)@UTtxV.WJ%|X=캅o*A T_w߿Y@,Tw(% |El4|+(מDh9u>?MOJX S`P8L|}!p ̏q9:5`e2h=Gw-в ˩O@ K,R,¤giօ]% t} _6ڛ!2WԒ5q(̍^S0m/Nԟ1ܘeAK.Q)Pw=Orݐ7;,Zc~P)z{?lzf|R[7~kSU*VU;ij8a+_O)`yzʏtq*:kCg-͐掦#OA)w~ :_ƳӁ2+I6ymʀo"ꌦ )h-^a밷S V=AKrw`[vTGH36;6ܼy6l-%YSTyxP4))C֕EvHz!n&~;P O8i*bh[-= Tz,l{tkɺ bz*%tDAgԖ4m.[×âĚ-J_BaBl"-G*.pH<_gZMw7IENDB`onionshare-2.6.3/cli/onionshare_cli/resources/static/img/logo_large.png000066400000000000000000000140021475545702100263360ustar00rootroot00000000000000PNG  IHDRRl pHYs,K,K=sRGBgAMA aIDATx_lUU{o x@bi b2b,w1D`ô$h8#<̃zʽ P7F$ Գٝݞ{c>ߟoT"iJ\ Jd$ XɞJd' H:c 1Y,dp58s!'ޛl+CuIgYԌA5t+ז7ǙqFY3a}ǮpFz4P|.K1C?FVO32dM3QNgH ZE'jM;v2O0A0/5°4i@Q1SP8,lKC ; ic K2w3o>,+פ:vHHơᑾB ,T:D:( qH;e ߶.6w+%ü1mF9W'w0DU %= M߉"!K`tqбcSO0hu,'Xh?G ȗ3?R~V}P5:,r@䜏/=EiP5,R*bN w0Ƚ -̄EK&EPH#=*y=@{C;-7DUPH̓ҦFU 4'{CR.RS2洹UƐ$hm #EҮ/pvIT9&إVgqj}z3v$AHS^~l"/*mG%V$ǧ` $!F~tY3Cִ'},t˜5sI0jH)Tg#axZ۲VYo/__'NJvݸ~&~0ܓJME-hc5x_bx"]FPáPo'[hӳ5ry&]ÜXJK}M>5Ǩ}m) =G;ƚ=~vKc[;wiq6h64hMPx>i#+:EV"Mu,_BOKB# !̼KB©sʞ-k&I#Z`!M\m*Ep\?P4~\ƛl 16 ǠCݥ_VYcA#gFx+CLaDt [ligtDT [û15d[9Dm(31y_R60bc0DЉOZq ڧ_S ,*:<,FP"{˿e,c8'z~*PS}) ӱwUaR-M~u-x{F/ifAZj YyjzydF* UV.83r{("2Y69o&D7M{!zq"t`uF}NwI% ,abƏ=ۙOxz\.rȉ^z<F*|} 2x.4)k xzR`Oׄb^3\g>;oTQ ! $y̯8}aFwtj5<"p$Xt8 'GI+׿\`R `R./" ,%W[+ɯ4@'i" 'DA ,Z<дI>ٚtS \ag=Q\ SbC ^ɩm.H$~J>P\ wDo '0I 0O"@;a84'@~c+ib ,,Huʬ6eaBn7Q ?m(I~6" f볃}aib ]?Xa֖< _Hk"%rL5`2.r;hQ9;׆=Vʑĸ'>mb:DmŦ OtRϹ|qF2Rh;bc7p& TLocƭEMT[ƣۅP 2Y(IQQkx5lWr4Y0$I֘1~⽯&vɐjZި.j/"FUiW!mZި&窪NUUD&c8I@FE"L SYE, Qjx#D?#a B1jx#?H6B-oD@sB,ƧE(6~d3:-o ƦEMX"A`ȴ Z2?RRŸ J?#`_Qix$4~5R՘K?3ՍHZE Ii}j$*ƣEM"]jNf4ZT*% $7>y#rsiRT0~ @.C5ՑRj"(%U0bOpj@;a0񽘣Ę[/pќt(kfm}V< }}bCeI0~Q0螨Yi(dH8PX˂Vݰem۵-gv:-O3T̅_oQ#/n8a8ƜP*\| !\k¾ `ëqV3V J/41,HC_" ѻ9hZ֔eSdnS li斣. \D?տݴi$"Xײ4}gbcg^_ ۰y\?}H'JW)w_F:'`ϼJU>:^#AUn[o);"B=O?Q iOs@> j#Qa\"1XƾS*$BWy!"p5pqōK  D/!Ѭzz'4t;jEMY ܃G=U '[H\o* #Au}vv@~f/WP%Bx!\GSi_.Qf}=zI1U WU ,mXʀ~С"0 2^KH /2e]qr#$Ϩw@-*ڻ xwO]\&}(x,TBhv{lmYG`Y&VߛJYEYNΙ0m/P䔪6! |?\W S!,:E:a$c< ߻k,*A"K.WƯ,ѸBblNSR2D]`"d]"w"ca>?ZuegfI6Pr1r^WYdkC]/0n{\I5-GDi/ă?S\X.efID[,r8 @;NQnRAd5q_O@"$O}JSr" 696$=D {nZY_/* fd{I2 tGJ,cB ,-mZn6d\́zе_KkҤ~@FRT_j{eJ Y:9 L:H5+N| $uwA16뼠2x_&a&ҷfFGω Q B+6˰^vC!QjϪGP@,CW.7t3|Cf>7VLƜ6ZYc, / ~vlh f@m> BK趻~U' _2] L$ݽs73#PD>i&!n{q >*eaS27]|7&s.C\)q,XRrU Րc)#(*!Gd˖(|XdkT=I~0(DVy8;pc|&Ά/X($_+s>=2'' a4?GTLK!:PJE\c燋D 5-&0$L$B x\=FxK3]FT3g[LV{ʐ_k,[?zEL8ݍ7Rd܎RS霊45mf70hhʅ0FGyi(T4c/+wVBML4d]rd[.nHxO8*v4ê~]lȲ̄1,DYe~jIENDB`onionshare-2.6.3/cli/onionshare_cli/resources/static/js/000077500000000000000000000000001475545702100233615ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/resources/static/js/chat.js000066400000000000000000000132041475545702100246360ustar00rootroot00000000000000$(function () { $(document).ready(function () { $('.chat-container').removeClass('no-js'); var socket = io.connect( 'http://' + document.domain + ':' + location.port + '/chat', { transports: ['websocket'] } ); // Store current username received from app context var current_username = $('#username').val().trim(); // Triggered on any status change by any user, such as some // user joined, or changed username, or left, etc. socket.on('status', function (data) { addMessageToPanel(data, current_username, 'status'); console.log(data, current_username); }); // Triggered when message is received from a user. Even when sent // by self, it get triggered after the server sends back the emit. socket.on('chat_message', function (data) { addMessageToPanel(data, current_username, 'chat'); console.log(data, current_username); }); // Triggered when disconnected either by server stop or timeout socket.on('disconnect', function (data) { addMessageToPanel({ 'msg': 'The chat server is disconnected.' }, current_username, 'status'); }) socket.on('connect_error', function (error) { console.log("error"); }) // Trigger new message on enter or click of send message button. $('#new-message').on('keypress', function (e) { var code = e.keyCode || e.which; if (code == 13) { emitMessage(socket); } }); // Keep buttons disabled unless changed or not empty $('#username').on('keyup', function (event) { if ($('#username').val() !== '' && $('#username').val() !== current_username) { if (event.keyCode == 13 || event.which == 13) { this.blur(); current_username = updateUsername(socket) || current_username; } } }); // Show warning of losing data $(window).on('beforeunload', function (e) { e.preventDefault(); e.returnValue = ''; return ''; }); }); }); var addMessageToPanel = function (data, current_username, messageType) { var scrollDiff = getScrollDiffBefore(); if (messageType === 'status') { addStatusMessage(data.msg); if (data.connected_users) { addUserList(data.connected_users, current_username); } } else if (messageType === 'chat') { addChatMessage(data.username, data.msg) } scrollBottomMaybe(scrollDiff); } var emitMessage = function (socket) { var text = $('#new-message').val(); $('#new-message').val(''); $('#chat').scrollTop($('#chat')[0].scrollHeight); socket.emit('text', { msg: text }); } var updateUsername = function (socket) { var username = $('#username').val(); if (!checkUsernameExists(username) && !checkUsernameTooLong(username) && !checkUsernameAscii(username)) { $.ajax({ method: 'POST', url: `http://${document.domain}:${location.port}/update-session-username`, contentType: 'application/json', dataType: 'json', data: JSON.stringify({ 'username': username }) }).done(function (response) { console.log(response); if (response.success && response.username == username) { socket.emit('update_username', { username: username }); } else { addStatusMessage("Failed to update username.") } }); return username; } return false; } /************************************/ /********* Util Functions ***********/ /************************************/ var createUserListHTML = function (connected_users, current_user) { var userListHTML = ''; connected_users.sort(); connected_users.forEach(function (username) { if (username !== current_user) { userListHTML += `
  • ${sanitizeHTML(username)}
  • `; } }); return userListHTML; } var checkUsernameAscii = function (username) { // ASCII characters have code points in the range U+0000-U+007F. $('#username-error').text(''); if (!/^[\u0000-\u007f]*$/.test(username)) { $('#username-error').text('Non-ASCII usernames are not supported.'); return true; } return false; } var checkUsernameExists = function (username) { $('#username-error').text(''); var userMatches = $('#user-list li').filter(function () { return $(this).text() === username; }); if (userMatches.length) { $('#username-error').text('User with that username exists!'); return true; } return false; } var checkUsernameTooLong = function (username) { $('#username-error').text(''); if (username.length > 128) { $('#username-error').text('Please choose a shorter username.'); return true; } return false; } var getScrollDiffBefore = function () { return $('#chat').scrollTop() - ($('#chat')[0].scrollHeight - $('#chat')[0].offsetHeight); } var scrollBottomMaybe = function (scrollDiff) { // Scrolls to bottom if the user is scrolled at bottom // if the user has scrolled up, it won't scroll at bottom. // Note: when a user themselves send a message, it will still // scroll to the bottom even if they had scrolled up before. if (scrollDiff > 0) { $('#chat').scrollTop($('#chat')[0].scrollHeight); } } var addStatusMessage = function (message) { $('#chat').append( `

    ${sanitizeHTML(message)}

    ` ); } var addChatMessage = function (username, message) { $('#chat').append(`

    ${sanitizeHTML(username)}${sanitizeHTML(message)}

    `); } var addUserList = function (connected_users, current_username) { $('#user-list').html( createUserListHTML( connected_users, current_username ) ); } var sanitizeHTML = function (str) { var temp = document.createElement('span'); temp.textContent = str; return temp.innerHTML; }; onionshare-2.6.3/cli/onionshare_cli/resources/static/js/jquery-3.5.1.min.js000066400000000000000000002566041475545702100264770ustar00rootroot00000000000000/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0').addClass(category).text(message)); }; var scriptSrc = document.getElementById('receive-script').src; var staticImgPath = scriptSrc.substr(0, scriptSrc.lastIndexOf('/') + 1).replace('js', 'img'); // Intercept submitting the form $('#send').submit(function (event) { event.preventDefault(); // Build the form data var formData = new FormData(); // Files var filenames = []; var $fileSelect = $('#file-select'); if ($fileSelect.length > 0) { var files = $fileSelect.get(0).files; for (var i = 0; i < files.length; i++) { var file = files[i]; filenames.push(file.name); formData.append('file[]', file, file.name); } } // Text message var $text = $('#text'); if ($text.length > 0) { formData.append("text", $text.val()) } // Reset the upload form $('#send').get(0).reset(); // Don't use jQuery for ajax request, because the upload progress event doesn't // have access to the the XMLHttpRequest object var ajax = new XMLHttpRequest(); ajax.upload.addEventListener('progress', function (event) { // Update progress bar for this specific upload if (event.lengthComputable) { $('progress', ajax.$upload_div).attr({ value: event.loaded, max: event.total, }); } // If it's finished sending all data to the first Tor node, remove cancel button // and update the status if (event.loaded == event.total) { $('.cancel', ajax.$upload_div).remove(); $('.upload-status', ajax.$upload_div).html(' Waiting for data to finish traversing Tor network ...'); } }, false); ajax.addEventListener('load', function (event) { // Remove the upload div ajax.$upload_div.remove(); // Parse response try { var response = JSON.parse(ajax.response); // The 'new_body' response replaces the whole HTML document and ends if ('new_body' in response) { $('body').html(response['new_body']); return; } // Show error flashes if ('error_flashes' in response) { for (var i = 0; i < response['error_flashes'].length; i++) { flash('error', response['error_flashes'][i]); } } // Show info flashes if ('info_flashes' in response) { for (var i = 0; i < response['info_flashes'].length; i++) { flash('info', response['info_flashes'][i]); } } } catch (e) { flash('error', 'Invalid response from server: ' + data); } }, false); ajax.addEventListener('error', function (event) { flash('error', 'Error uploading: ' + filenames.join(', ')); // Remove the upload div ajax.$upload_div.remove() }, false); ajax.addEventListener('abort', function (event) { flash('error', 'Upload aborted: ' + filenames.join(', ')); }, false); // Make the upload div /* The DOM for an upload looks something like this:
    educational-video.mp4, secret-plans.pdf
    Sending to first Tor node ...
    */ var $progress = $('').attr({ value: '0', max: 100 }); var $cancel_button = $('').addClass('cancel').attr({ type: 'button', value: 'Cancel' }); var $upload_filename = $('
    ').addClass('upload-filename').text(filenames.join(', ')); var $upload_status = $('
    ').addClass('upload-status').text('Sending data to initial Tor node ...'); var $upload_div = $('
    ') .addClass('upload') .append( $('
    ').addClass('upload-meta') .append($cancel_button) .append($upload_filename) .append($upload_status) ) .append($progress); $cancel_button.click(function () { // Abort the upload, and remove the upload div ajax.abort(); $upload_div.remove() }); ajax.$upload_div = $upload_div; $('#uploads').append($upload_div); // Send the request ajax.open('POST', '/upload-ajax', true); ajax.send(formData); }); }); onionshare-2.6.3/cli/onionshare_cli/resources/static/js/send.js000066400000000000000000000052771475545702100246630ustar00rootroot00000000000000// Function to convert human-readable sizes back to bytes, for sorting function unhumanize(text) { var powers = {'b': 0, 'k': 1, 'm': 2, 'g': 3, 't': 4}; var regex = /(\d+(?:\.\d+)?)\s?(B|K|M|G|T)?/i; var res = regex.exec(text); if(res[2] === undefined) { // Account for alphabetical words (file/dir names) return text; } else { return res[1] * Math.pow(1024, powers[res[2].toLowerCase()]); } } function sortTable(n) { var table, rows, switching, i, x, y, valX, valY, shouldSwitch, dir, switchcount = 0; table = document.getElementById("file-list"); switching = true; // Set the sorting direction to ascending: dir = "asc"; /* Make a loop that will continue until no switching has been done: */ while (switching) { // Start by saying: no switching is done: switching = false; rows = table.getElementsByClassName("row"); /* Loop through all table rows (except the first, which contains table headers): */ for (i = 1; i < (rows.length - 1); i++) { // Start by saying there should be no switching: shouldSwitch = false; /* Get the two elements you want to compare, one from current row and one from the next: */ x = rows[i].getElementsByClassName("cell-data")[n]; y = rows[i + 1].getElementsByClassName("cell-data")[n]; valX = x.classList.contains("size") ? unhumanize(x.innerHTML.toLowerCase()) : x.innerHTML; valY = y.classList.contains("size") ? unhumanize(y.innerHTML.toLowerCase()) : y.innerHTML; /* Check if the two rows should switch place, based on the direction, asc or desc: */ if (dir == "asc") { if (valX > valY) { // If so, mark as a switch and break the loop: shouldSwitch= true; break; } } else if (dir == "desc") { if (valX < valY) { // If so, mark as a switch and break the loop: shouldSwitch= true; break; } } } if (shouldSwitch) { /* If a switch has been marked, make the switch and mark that a switch has been done: */ rows[i].parentNode.insertBefore(rows[i + 1], rows[i]); switching = true; // Each time a switch is done, increase this count by 1: switchcount ++; } else { /* If no switching has been done AND the direction is "asc", set the direction to "desc" and run the while loop again. */ if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } // Set click handlers document.getElementById("filename-header").addEventListener("click", function(){ sortTable(0); }); document.getElementById("size-header").addEventListener("click", function(){ sortTable(1); }); onionshare-2.6.3/cli/onionshare_cli/resources/static/js/socket.io.js000066400000000000000000002061161475545702100256230ustar00rootroot00000000000000/*! * Socket.IO v2.3.0 * (c) 2014-2019 Guillermo Rauch * Released under the MIT License. */ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){function r(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,r=o(t),i=r.source,u=r.id,p=r.path,h=c[u]&&p in c[u].nsps,f=e.forceNew||e["force new connection"]||!1===e.multiplex||h;return f?(a("ignoring socket cache for %s",i),n=s(i,e)):(c[u]||(a("new io instance for %s",i),c[u]=s(i,e)),n=c[u]),r.query&&!e.query&&(e.query=r.query),n.socket(r.path,e)}var o=n(1),i=n(7),s=n(15),a=n(3)("socket.io-client");t.exports=e=r;var c=e.managers={};e.protocol=i.protocol,e.connect=r,e.Manager=n(15),e.Socket=n(39)},function(t,e,n){function r(t,e){var n=t;e=e||"undefined"!=typeof location&&location,null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?e.protocol+t:e.host+t),/^(https?|wss?):\/\//.test(t)||(i("protocol-less url %s",t),t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),i("parse %s",t),n=o(t)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";var r=n.host.indexOf(":")!==-1,s=r?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+s+":"+n.port,n.href=n.protocol+"://"+s+(e&&e.port===n.port?"":":"+n.port),n}var o=n(2),i=n(3)("socket.io-client:url");t.exports=r},function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");o!=-1&&i!=-1&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=n.exec(t||""),a={},c=14;c--;)a[r[c]]=s[c]||"";return o!=-1&&i!=-1&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),this.useColors){var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var r=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(r++,"%c"===t&&(o=r))}),e.splice(o,0,n)}}function s(){var t;return"object"===("undefined"==typeof console?"undefined":p(console))&&console.log&&(t=console).log.apply(t,arguments)}function a(t){try{t?e.storage.setItem("debug",t):e.storage.removeItem("debug")}catch(n){}}function c(){var t=void 0;try{t=e.storage.getItem("debug")}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function u(){try{return localStorage}catch(t){}}var p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage=u(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.exports=n(5)(e);var h=t.exports.formatters;h.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(e,n(4))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(t){if(p===setTimeout)return setTimeout(t,0);if((p===n||!p)&&setTimeout)return p=setTimeout,setTimeout(t,0);try{return p(t,0)}catch(e){try{return p.call(null,t,0)}catch(e){return p.call(this,t,0)}}}function i(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){y&&l&&(y=!1,l.length?d=l.concat(d):m=-1,d.length&&a())}function a(){if(!y){var t=o(s);y=!0;for(var e=d.length;e;){for(l=d,d=[];++m1)for(var n=1;n100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*h;case"weeks":case"week":case"w":return n*p;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){var e=Math.abs(t);return e>=u?Math.round(t/u)+"d":e>=c?Math.round(t/c)+"h":e>=a?Math.round(t/a)+"m":e>=s?Math.round(t/s)+"s":t+"ms"}function o(t){var e=Math.abs(t);return e>=u?i(t,e,u,"day"):e>=c?i(t,e,c,"hour"):e>=a?i(t,e,a,"minute"):e>=s?i(t,e,s,"second"):t+" ms"}function i(t,e,n,r){var o=e>=1.5*n;return Math.round(t/n)+" "+r+(o?"s":"")}var s=1e3,a=60*s,c=60*a,u=24*c,p=7*u,h=365.25*u;t.exports=function(t,e){e=e||{};var i=typeof t;if("string"===i&&t.length>0)return n(t);if("number"===i&&isFinite(t))return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(){}function o(t){var n=""+t.type;if(e.BINARY_EVENT!==t.type&&e.BINARY_ACK!==t.type||(n+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(n+=t.nsp+","),null!=t.id&&(n+=t.id),null!=t.data){var r=i(t.data);if(r===!1)return g;n+=r}return f("encoded %j as %s",t,n),n}function i(t){try{return JSON.stringify(t)}catch(e){return!1}}function s(t,e){function n(t){var n=d.deconstructPacket(t),r=o(n.packet),i=n.buffers;i.unshift(r),e(i)}d.removeBlobs(t,n)}function a(){this.reconstructor=null}function c(t){var n=0,r={type:Number(t.charAt(0))};if(null==e.types[r.type])return h("unknown packet type "+r.type);if(e.BINARY_EVENT===r.type||e.BINARY_ACK===r.type){for(var o="";"-"!==t.charAt(++n)&&(o+=t.charAt(n),n!=t.length););if(o!=Number(o)||"-"!==t.charAt(n))throw new Error("Illegal attachments");r.attachments=Number(o)}if("/"===t.charAt(n+1))for(r.nsp="";++n;){var i=t.charAt(n);if(","===i)break;if(r.nsp+=i,n===t.length)break}else r.nsp="/";var s=t.charAt(n+1);if(""!==s&&Number(s)==s){for(r.id="";++n;){var i=t.charAt(n);if(null==i||Number(i)!=i){--n;break}if(r.id+=t.charAt(n),n===t.length)break}r.id=Number(r.id)}if(t.charAt(++n)){var a=u(t.substr(n)),c=a!==!1&&(r.type===e.ERROR||y(a));if(!c)return h("invalid payload");r.data=a}return f("decoded %s as %j",t,r),r}function u(t){try{return JSON.parse(t)}catch(e){return!1}}function p(t){this.reconPack=t,this.buffers=[]}function h(t){return{type:e.ERROR,data:"parser error: "+t}}var f=n(8)("socket.io-parser"),l=n(11),d=n(12),y=n(13),m=n(14);e.protocol=4,e.types=["CONNECT","DISCONNECT","EVENT","ACK","ERROR","BINARY_EVENT","BINARY_ACK"],e.CONNECT=0,e.DISCONNECT=1,e.EVENT=2,e.ACK=3,e.ERROR=4,e.BINARY_EVENT=5,e.BINARY_ACK=6,e.Encoder=r,e.Decoder=a;var g=e.ERROR+'"encode error"';r.prototype.encode=function(t,n){if(f("encoding packet %j",t),e.BINARY_EVENT===t.type||e.BINARY_ACK===t.type)s(t,n);else{var r=o(t);n([r])}},l(a.prototype),a.prototype.add=function(t){var n;if("string"==typeof t)n=c(t),e.BINARY_EVENT===n.type||e.BINARY_ACK===n.type?(this.reconstructor=new p(n),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",n)):this.emit("decoded",n);else{if(!m(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");n=this.reconstructor.takeBinaryData(t),n&&(this.reconstructor=null,this.emit("decoded",n))}},a.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},p.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=d.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},p.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},function(t,e,n){(function(r){"use strict";function o(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function i(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var o=0,i=0;t[0].replace(/%[a-zA-Z%]/g,function(t){"%%"!==t&&(o++,"%c"===t&&(i=o))}),t.splice(i,0,r)}}function s(){return"object"===("undefined"==typeof console?"undefined":p(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(n){}}function c(){var t;try{t=e.storage.debug}catch(n){}return!t&&"undefined"!=typeof r&&"env"in r&&(t=r.env.DEBUG),t}function u(){try{return window.localStorage}catch(t){}}var p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e=t.exports=n(9),e.log=s,e.formatArgs=i,e.save=a,e.load=c,e.useColors=o,e.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:u(),e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},e.enable(c())}).call(e,n(4))},function(t,e,n){"use strict";function r(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}function o(t){function n(){if(n.enabled){var t=n,r=+new Date,i=r-(o||r);t.diff=i,t.prev=o,t.curr=r,o=r;for(var s=new Array(arguments.length),a=0;a100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*p;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){return t>=u?Math.round(t/u)+"d":t>=c?Math.round(t/c)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function o(t){return i(t,u,"day")||i(t,c,"hour")||i(t,a,"minute")||i(t,s,"second")||t+" ms"}function i(t,e,n){if(!(t0)return n(t);if("number"===i&&isNaN(t)===!1)return e["long"]?o(t):r(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){function r(t){if(t)return o(t)}function o(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var r,o=0;o0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},r.prototype.cleanup=function(){p("cleanup");for(var t=this.subs.length,e=0;e=this._reconnectionAttempts)p("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();p("will wait %dms before reconnect attempt",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(p("attempting reconnect"),t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(p("reconnect attempt error"),t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):(p("reconnect success"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},r.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},function(t,e,n){t.exports=n(17),t.exports.parser=n(24)},function(t,e,n){function r(t,e){return this instanceof r?(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t?(t=p(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=p(e.host).host),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.agent=e.agent||!1,this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.withCredentials=!1!==e.withCredentials,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.transportOptions=e.transportOptions||{},this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.perMessageDeflate=!1!==e.perMessageDeflate&&(e.perMessageDeflate||{}),!0===this.perMessageDeflate&&(this.perMessageDeflate={}),this.perMessageDeflate&&null==this.perMessageDeflate.threshold&&(this.perMessageDeflate.threshold=1024),this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=void 0===e.rejectUnauthorized||e.rejectUnauthorized,this.forceNode=!!e.forceNode,this.isReactNative="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),("undefined"==typeof self||this.isReactNative)&&(e.extraHeaders&&Object.keys(e.extraHeaders).length>0&&(this.extraHeaders=e.extraHeaders),e.localAddress&&(this.localAddress=e.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,void this.open()):new r(t,e)}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=n(18),s=n(11),a=n(3)("engine.io-client:socket"),c=n(38),u=n(24),p=n(2),h=n(32);t.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=u.protocol,r.Socket=r,r.Transport=n(23),r.transports=n(18),r.parser=n(24),r.prototype.createTransport=function(t){a('creating transport "%s"',t);var e=o(this.query);e.EIO=u.protocol,e.transport=t;var n=this.transportOptions[t]||{};this.id&&(e.sid=this.id);var r=new i[t]({query:e,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,withCredentials:n.withCredentials||this.withCredentials,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative});return r},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1)t="websocket";else{ if(0===this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a("setting transport %s",t.name);var e=this;this.transport&&(a("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},r.prototype.probe=function(t){function e(){if(f.onlyBinaryUpgrades){var e=!this.supportsBinary&&f.transport.supportsBinary;h=h||e}h||(a('probe transport "%s" opened',t),p.send([{type:"ping",data:"probe"}]),p.once("packet",function(e){if(!h)if("pong"===e.type&&"probe"===e.data){if(a('probe transport "%s" pong',t),f.upgrading=!0,f.emit("upgrading",p),!p)return;r.priorWebsocketSuccess="websocket"===p.name,a('pausing current transport "%s"',f.transport.name),f.transport.pause(function(){h||"closed"!==f.readyState&&(a("changing transport and sending upgrade packet"),u(),f.setTransport(p),p.send([{type:"upgrade"}]),f.emit("upgrade",p),p=null,f.upgrading=!1,f.flush())})}else{a('probe transport "%s" failed',t);var n=new Error("probe error");n.transport=p.name,f.emit("upgradeError",n)}}))}function n(){h||(h=!0,u(),p.close(),p=null)}function o(e){var r=new Error("probe error: "+e);r.transport=p.name,n(),a('probe transport "%s" failed because of error: %s',t,e),f.emit("upgradeError",r)}function i(){o("transport closed")}function s(){o("socket closed")}function c(t){p&&t.name!==p.name&&(a('"%s" works - aborting "%s"',t.name,p.name),n())}function u(){p.removeListener("open",e),p.removeListener("error",o),p.removeListener("close",i),f.removeListener("close",s),f.removeListener("upgrading",c)}a('probing transport "%s"',t);var p=this.createTransport(t,{probe:1}),h=!1,f=this;r.priorWebsocketSuccess=!1,p.once("open",e),p.once("error",o),p.once("close",i),this.once("close",s),this.once("upgrading",c),p.open()},r.prototype.onOpen=function(){if(a("socket open"),this.readyState="open",r.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){a("starting upgrade probes");for(var t=0,e=this.upgrades.length;t1?{type:b[o],data:t.substring(1)}:{type:b[o]}:C}var i=new Uint8Array(t),o=i[0],s=f(t,1);return w&&"blob"===n&&(s=new w([s])),{type:b[o],data:s}},e.decodeBase64Packet=function(t,e){var n=b[t.charAt(0)];if(!u)return{type:n,data:{base64:!0,data:t.substr(1)}};var r=u.decode(t.substr(1));return"blob"===e&&w&&(r=new w([r])),{type:n,data:r}},e.encodePayload=function(t,n,r){function o(t){return t.length+":"+t}function i(t,r){e.encodePacket(t,!!s&&n,!1,function(t){r(null,o(t))})}"function"==typeof n&&(r=n,n=null);var s=h(t);return n&&s?w&&!g?e.encodePayloadAsBlob(t,r):e.encodePayloadAsArrayBuffer(t,r):t.length?void c(t,i,function(t,e){return r(e.join(""))}):r("0:")},e.decodePayload=function(t,n,r){if("string"!=typeof t)return e.decodePayloadAsBinary(t,n,r);"function"==typeof n&&(r=n,n=null);var o;if(""===t)return r(C,0,1);for(var i,s,a="",c=0,u=t.length;c0;){for(var s=new Uint8Array(o),a=0===s[0],c="",u=1;255!==s[u];u++){if(c.length>310)return r(C,0,1);c+=s[u]}o=f(o,2+c.length),c=parseInt(c);var p=f(o,0,c);if(a)try{p=String.fromCharCode.apply(null,new Uint8Array(p))}catch(h){var l=new Uint8Array(p);p="";for(var u=0;ur&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;s=55296&&e<=56319&&o65535&&(e-=65536,o+=d(e>>>10&1023|55296),e=56320|1023&e),o+=d(e);return o}function o(t,e){if(t>=55296&&t<=57343){if(e)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function i(t,e){return d(t>>e&63|128)}function s(t,e){if(0==(4294967168&t))return d(t);var n="";return 0==(4294965248&t)?n=d(t>>6&31|192):0==(4294901760&t)?(o(t,e)||(t=65533),n=d(t>>12&15|224),n+=i(t,6)):0==(4292870144&t)&&(n=d(t>>18&7|240),n+=i(t,12),n+=i(t,6)),n+=d(63&t|128)}function a(t,e){e=e||{};for(var r,o=!1!==e.strict,i=n(t),a=i.length,c=-1,u="";++c=f)throw Error("Invalid byte index");var t=255&h[l];if(l++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function u(t){var e,n,r,i,s;if(l>f)throw Error("Invalid byte index");if(l==f)return!1;if(e=255&h[l],l++,0==(128&e))return e;if(192==(224&e)){if(n=c(),s=(31&e)<<6|n,s>=128)return s;throw Error("Invalid continuation byte")}if(224==(240&e)){if(n=c(),r=c(),s=(15&e)<<12|n<<6|r,s>=2048)return o(s,t)?s:65533;throw Error("Invalid continuation byte")}if(240==(248&e)&&(n=c(),r=c(),i=c(),s=(7&e)<<18|n<<12|r<<6|i,s>=65536&&s<=1114111))return s;throw Error("Invalid UTF-8 detected")}function p(t,e){e=e||{};var o=!1!==e.strict;h=n(t),f=h.length,l=0;for(var i,s=[];(i=u(o))!==!1;)s.push(i);return r(s)}/*! https://mths.be/utf8js v2.1.2 by @mathias */ var h,f,l,d=String.fromCharCode;t.exports={version:"2.1.2",encode:a,decode:p}},function(t,e){!function(){"use strict";for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=new Uint8Array(256),r=0;r>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(t){var e,r,o,i,s,a=.75*t.length,c=t.length,u=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var p=new ArrayBuffer(a),h=new Uint8Array(p);for(e=0;e>4,h[u++]=(15&o)<<4|i>>2,h[u++]=(3&i)<<6|63&s;return p}}()},function(t,e){function n(t){return t.map(function(t){if(t.buffer instanceof ArrayBuffer){var e=t.buffer;if(t.byteLength!==e.byteLength){var n=new Uint8Array(t.byteLength);n.set(new Uint8Array(e,t.byteOffset,t.byteLength)),e=n.buffer}return e}return t})}function r(t,e){e=e||{};var r=new i;return n(t).forEach(function(t){r.append(t)}),e.type?r.getBlob(e.type):r.getBlob()}function o(t,e){return new Blob(n(t),e||{})}var i="undefined"!=typeof i?i:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder&&MozBlobBuilder,s=function(){try{var t=new Blob(["hi"]);return 2===t.size}catch(e){return!1}}(),a=s&&function(){try{var t=new Blob([new Uint8Array([1,2])]);return 2===t.size}catch(e){return!1}}(),c=i&&i.prototype.append&&i.prototype.getBlob;"undefined"!=typeof Blob&&(r.prototype=Blob.prototype,o.prototype=Blob.prototype),t.exports=function(){return s?a?Blob:o:c?r:void 0}()},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r0);return e}function r(t){var e=0;for(p=0;p';i=document.createElement(e)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),c=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=c,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(p,"\\\n"),this.area.value=t.replace(u,"\\n");try{this.form.submit()}catch(h){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===o.iframe.readyState&&n()}:this.iframe.onload=n}}).call(e,function(){return this}())},function(t,e,n){function r(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),this.perMessageDeflate=t.perMessageDeflate,this.usingBrowserWebSocket=o&&!t.forceNode,this.protocols=t.protocols,this.usingBrowserWebSocket||(l=i),s.call(this,t)}var o,i,s=n(23),a=n(24),c=n(32),u=n(33),p=n(34),h=n(3)("engine.io-client:websocket");if("undefined"!=typeof WebSocket?o=WebSocket:"undefined"!=typeof self&&(o=self.WebSocket||self.MozWebSocket),"undefined"==typeof window)try{i=n(37)}catch(f){}var l=o||i;t.exports=r,u(r,s),r.prototype.name="websocket",r.prototype.supportsBinary=!0,r.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=this.protocols,n={agent:this.agent,perMessageDeflate:this.perMessageDeflate};n.pfx=this.pfx,n.key=this.key,n.passphrase=this.passphrase,n.cert=this.cert,n.ca=this.ca,n.ciphers=this.ciphers,n.rejectUnauthorized=this.rejectUnauthorized,this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?e?new l(t,e):new l(t):new l(t,e,n)}catch(r){return this.emit("error",r)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},r.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},r.prototype.write=function(t){function e(){n.emit("flush"),setTimeout(function(){n.writable=!0,n.emit("drain")},0)}var n=this;this.writable=!1;for(var r=t.length,o=0,i=r;o0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])}); //# sourceMappingURL=socket.io.js.maponionshare-2.6.3/cli/onionshare_cli/resources/static/js/socket.io.min.js000066400000000000000000001206321475545702100264030ustar00rootroot00000000000000/*! * Socket.IO v4.4.1 * (c) 2014-2022 Guillermo Rauch * Released under the MIT License. */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).io=e()}(this,(function(){"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){a=!0,i=t},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}var d=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,y=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],v=function(t){var e=t,n=t.indexOf("["),r=t.indexOf("]");-1!=n&&-1!=r&&(t=t.substring(0,n)+t.substring(n,r).replace(/:/g,";")+t.substring(r,t.length));for(var o,i,s=d.exec(t||""),a={},c=14;c--;)a[y[c]]=s[c]||"";return-1!=n&&-1!=r&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(t,e){var n=/\/{2,9}/g,r=e.replace(n,"/").split("/");"/"!=e.substr(0,1)&&0!==e.length||r.splice(0,1);"/"==e.substr(e.length-1,1)&&r.splice(r.length-1,1);return r}(0,a.path),a.queryKey=(o=a.query,i={},o.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(i[e]=n)})),i),a};var m={exports:{}};try{m.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(t){m.exports=!1}var g=m.exports,k="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function b(t){var e=t.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!e||g))return new XMLHttpRequest}catch(t){}if(!e)try{return new(k[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}function w(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r1?{type:O[n],data:t.substring(1)}:{type:O[n]}:S},M=function(t,e){if(I){var n=function(t){var e,n,r,o,i,s=.75*t.length,a=t.length,c=0;"="===t[t.length-1]&&(s--,"="===t[t.length-2]&&s--);var u=new ArrayBuffer(s),h=new Uint8Array(u);for(e=0;e>4,h[c++]=(15&r)<<4|o>>2,h[c++]=(3&o)<<6|63&i;return u}(t);return U(n,e)}return{base64:!0,data:t}},U=function(t,e){return"blob"===e&&t instanceof ArrayBuffer?new Blob([t]):t},V=String.fromCharCode(30),H=function(t){i(o,t);var n=h(o);function o(t){var r;return e(this,o),(r=n.call(this)).writable=!1,A(c(r),t),r.opts=t,r.query=t.query,r.readyState="",r.socket=t.socket,r}return r(o,[{key:"onError",value:function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,f(s(o.prototype),"emit",this).call(this,"error",n),this}},{key:"open",value:function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this}},{key:"close",value:function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}},{key:"send",value:function(t){"open"===this.readyState&&this.write(t)}},{key:"onOpen",value:function(){this.readyState="open",this.writable=!0,f(s(o.prototype),"emit",this).call(this,"open")}},{key:"onData",value:function(t){var e=F(t,this.socket.binaryType);this.onPacket(e)}},{key:"onPacket",value:function(t){f(s(o.prototype),"emit",this).call(this,"packet",t)}},{key:"onClose",value:function(){this.readyState="closed",f(s(o.prototype),"emit",this).call(this,"close")}}]),o}(R),K="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),Y={},z=0,$=0;function W(t){var e="";do{e=K[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function J(){var t=W(+new Date);return t!==D?(z=0,D=t):t+"."+W(z++)}for(;$<64;$++)Y[K[$]]=$;J.encode=W,J.decode=function(t){var e=0;for($=0;$0&&void 0!==arguments[0]?arguments[0]:{};return o(t,{xd:this.xd,xs:this.xs},this.opts),new nt(this.uri(),t)}},{key:"doWrite",value:function(t,e){var n=this,r=this.request({method:"POST",data:t});r.on("success",e),r.on("error",(function(t){n.onError("xhr post error",t)}))}},{key:"doPoll",value:function(){var t=this,e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(function(e){t.onError("xhr poll error",e)})),this.pollXhr=e}}]),s}(Q),nt=function(t){i(o,t);var n=h(o);function o(t,r){var i;return e(this,o),A(c(i=n.call(this)),r),i.opts=r,i.method=r.method||"GET",i.uri=t,i.async=!1!==r.async,i.data=void 0!==r.data?r.data:null,i.create(),i}return r(o,[{key:"create",value:function(){var t=this,e=w(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this.opts.xd,e.xscheme=!!this.opts.xs;var n=this.xhr=new b(e);try{n.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var r in n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(r)&&n.setRequestHeader(r,this.opts.extraHeaders[r])}catch(t){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{n.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=function(){4===n.readyState&&(200===n.status||1223===n.status?t.onLoad():t.setTimeoutFn((function(){t.onError("number"==typeof n.status?n.status:0)}),0))},n.send(this.data)}catch(e){return void this.setTimeoutFn((function(){t.onError(e)}),0)}"undefined"!=typeof document&&(this.index=o.requestsCount++,o.requests[this.index]=this)}},{key:"onSuccess",value:function(){this.emit("success"),this.cleanup()}},{key:"onData",value:function(t){this.emit("data",t),this.onSuccess()}},{key:"onError",value:function(t){this.emit("error",t),this.cleanup(!0)}},{key:"cleanup",value:function(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Z,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete o.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var t=this.xhr.responseText;null!==t&&this.onData(t)}},{key:"abort",value:function(){this.cleanup()}}]),o}(R);if(nt.requestsCount=0,nt.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",rt);else if("function"==typeof addEventListener){addEventListener("onpagehide"in k?"pagehide":"unload",rt,!1)}function rt(){for(var t in nt.requests)nt.requests.hasOwnProperty(t)&&nt.requests[t].abort()}var ot="function"==typeof Promise&&"function"==typeof Promise.resolve?function(t){return Promise.resolve().then(t)}:function(t,e){return e(t,0)},it=k.WebSocket||k.MozWebSocket,st="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),at=function(t){i(o,t);var n=h(o);function o(t){var r;return e(this,o),(r=n.call(this,t)).supportsBinary=!t.forceBase64,r}return r(o,[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var t=this.uri(),e=this.opts.protocols,n=st?{}:w(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=st?new it(t,e,n):e?new it(t,e):new it(t)}catch(t){return this.emit("error",t)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}}},{key:"addEventListeners",value:function(){var t=this;this.ws.onopen=function(){t.opts.autoUnref&&t.ws._socket.unref(),t.onOpen()},this.ws.onclose=this.onClose.bind(this),this.ws.onmessage=function(e){return t.onData(e.data)},this.ws.onerror=function(e){return t.onError("websocket error",e)}}},{key:"write",value:function(t){var e=this;this.writable=!1;for(var n=function(n){var r=t[n],o=n===t.length-1;x(r,e.supportsBinary,(function(t){try{e.ws.send(t)}catch(t){}o&&ot((function(){e.writable=!0,e.emit("drain")}),e.setTimeoutFn)}))},r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return e(this,a),r=s.call(this),n&&"object"===t(n)&&(i=n,n=null),n?(n=v(n),i.hostname=n.host,i.secure="https"===n.protocol||"wss"===n.protocol,i.port=n.port,n.query&&(i.query=n.query)):i.host&&(i.hostname=v(i.host).host),A(c(r),i),r.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=r.secure?"443":"80"),r.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),r.port=i.port||("undefined"!=typeof location&&location.port?location.port:r.secure?"443":"80"),r.transports=i.transports||["polling","websocket"],r.readyState="",r.writeBuffer=[],r.prevBufferLen=0,r.opts=o({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},i),r.opts.path=r.opts.path.replace(/\/$/,"")+"/","string"==typeof r.opts.query&&(r.opts.query=G.decode(r.opts.query)),r.id=null,r.upgrades=null,r.pingInterval=null,r.pingTimeout=null,r.pingTimeoutTimer=null,"function"==typeof addEventListener&&(r.opts.closeOnBeforeunload&&addEventListener("beforeunload",(function(){r.transport&&(r.transport.removeAllListeners(),r.transport.close())}),!1),"localhost"!==r.hostname&&(r.offlineEventListener=function(){r.onClose("transport close")},addEventListener("offline",r.offlineEventListener,!1))),r.open(),r}return r(a,[{key:"createTransport",value:function(t){var e=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(this.opts.query);e.EIO=4,e.transport=t,this.id&&(e.sid=this.id);var n=o({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new ct[t](n)}},{key:"open",value:function(){var t,e=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){e.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}},{key:"setTransport",value:function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(){e.onClose("transport close")}))}},{key:"probe",value:function(t){var e=this,n=this.createTransport(t),r=!1;a.priorWebsocketSuccess=!1;var o=function(){r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",(function(t){if(!r)if("pong"===t.type&&"probe"===t.data){if(e.upgrading=!0,e.emitReserved("upgrading",n),!n)return;a.priorWebsocketSuccess="websocket"===n.name,e.transport.pause((function(){r||"closed"!==e.readyState&&(f(),e.setTransport(n),n.send([{type:"upgrade"}]),e.emitReserved("upgrade",n),n=null,e.upgrading=!1,e.flush())}))}else{var o=new Error("probe error");o.transport=n.name,e.emitReserved("upgradeError",o)}})))};function i(){r||(r=!0,f(),n.close(),n=null)}var s=function(t){var r=new Error("probe error: "+t);r.transport=n.name,i(),e.emitReserved("upgradeError",r)};function c(){s("transport closed")}function u(){s("socket closed")}function h(t){n&&t.name!==n.name&&i()}var f=function(){n.removeListener("open",o),n.removeListener("error",s),n.removeListener("close",c),e.off("close",u),e.off("upgrading",h)};n.once("open",o),n.once("error",s),n.once("close",c),this.once("close",u),this.once("upgrading",h),n.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t0;case bt.ACK:case bt.BINARY_ACK:return Array.isArray(n)}}}]),a}(R);var Et=function(){function t(n){e(this,t),this.packet=n,this.buffers=[],this.reconPack=n}return r(t,[{key:"takeBinaryData",value:function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=gt(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}},{key:"finishedReconstruction",value:function(){this.reconPack=null,this.buffers=[]}}]),t}(),At=Object.freeze({__proto__:null,protocol:5,get PacketType(){return bt},Encoder:wt,Decoder:_t});function Rt(t,e,n){return t.on(e,n),function(){t.off(e,n)}}var Tt=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),Ct=function(t){i(o,t);var n=h(o);function o(t,r,i){var s;return e(this,o),(s=n.call(this)).connected=!1,s.disconnected=!0,s.receiveBuffer=[],s.sendBuffer=[],s.ids=0,s.acks={},s.flags={},s.io=t,s.nsp=r,i&&i.auth&&(s.auth=i.auth),s.io._autoConnect&&s.open(),s}return r(o,[{key:"subEvents",value:function(){if(!this.subs){var t=this.io;this.subs=[Rt(t,"open",this.onopen.bind(this)),Rt(t,"packet",this.onpacket.bind(this)),Rt(t,"error",this.onerror.bind(this)),Rt(t,"close",this.onclose.bind(this))]}}},{key:"active",get:function(){return!!this.subs}},{key:"connect",value:function(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}},{key:"open",value:function(){return this.connect()}},{key:"send",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n1?e-1:0),r=1;r0&&t.jitter<=1?t.jitter:0,this.attempts=0}St.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},St.prototype.reset=function(){this.attempts=0},St.prototype.setMin=function(t){this.ms=t},St.prototype.setMax=function(t){this.max=t},St.prototype.setJitter=function(t){this.jitter=t};var Bt=function(n){i(s,n);var o=h(s);function s(n,r){var i,a;e(this,s),(i=o.call(this)).nsps={},i.subs=[],n&&"object"===t(n)&&(r=n,n=void 0),(r=r||{}).path=r.path||"/socket.io",i.opts=r,A(c(i),r),i.reconnection(!1!==r.reconnection),i.reconnectionAttempts(r.reconnectionAttempts||1/0),i.reconnectionDelay(r.reconnectionDelay||1e3),i.reconnectionDelayMax(r.reconnectionDelayMax||5e3),i.randomizationFactor(null!==(a=r.randomizationFactor)&&void 0!==a?a:.5),i.backoff=new Ot({min:i.reconnectionDelay(),max:i.reconnectionDelayMax(),jitter:i.randomizationFactor()}),i.timeout(null==r.timeout?2e4:r.timeout),i._readyState="closed",i.uri=n;var u=r.parser||At;return i.encoder=new u.Encoder,i.decoder=new u.Decoder,i._autoConnect=!1!==r.autoConnect,i._autoConnect&&i.open(),i}return r(s,[{key:"reconnection",value:function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}},{key:"reconnectionAttempts",value:function(t){return void 0===t?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}},{key:"reconnectionDelay",value:function(t){var e;return void 0===t?this._reconnectionDelay:(this._reconnectionDelay=t,null===(e=this.backoff)||void 0===e||e.setMin(t),this)}},{key:"randomizationFactor",value:function(t){var e;return void 0===t?this._randomizationFactor:(this._randomizationFactor=t,null===(e=this.backoff)||void 0===e||e.setJitter(t),this)}},{key:"reconnectionDelayMax",value:function(t){var e;return void 0===t?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,null===(e=this.backoff)||void 0===e||e.setMax(t),this)}},{key:"timeout",value:function(t){return arguments.length?(this._timeout=t,this):this._timeout}},{key:"maybeReconnectOnOpen",value:function(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}},{key:"open",value:function(t){var e=this;if(~this._readyState.indexOf("open"))return this;this.engine=new ut(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var o=Rt(n,"open",(function(){r.onopen(),t&&t()})),i=Rt(n,"error",(function(n){r.cleanup(),r._readyState="closed",e.emitReserved("error",n),t?t(n):r.maybeReconnectOnOpen()}));if(!1!==this._timeout){var s=this._timeout;0===s&&o();var a=this.setTimeoutFn((function(){o(),n.close(),n.emit("error",new Error("timeout"))}),s);this.opts.autoUnref&&a.unref(),this.subs.push((function(){clearTimeout(a)}))}return this.subs.push(o),this.subs.push(i),this}},{key:"connect",value:function(t){return this.open(t)}},{key:"onopen",value:function(){this.cleanup(),this._readyState="open",this.emitReserved("open");var t=this.engine;this.subs.push(Rt(t,"ping",this.onping.bind(this)),Rt(t,"data",this.ondata.bind(this)),Rt(t,"error",this.onerror.bind(this)),Rt(t,"close",this.onclose.bind(this)),Rt(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){this.emitReserved("ping")}},{key:"ondata",value:function(t){this.decoder.add(t)}},{key:"ondecoded",value:function(t){this.emitReserved("packet",t)}},{key:"onerror",value:function(t){this.emitReserved("error",t)}},{key:"socket",value:function(t,e){var n=this.nsps[t];return n||(n=new Ct(this,t,e),this.nsps[t]=n),n}},{key:"_destroy",value:function(t){for(var e=0,n=Object.keys(this.nsps);e=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{var n=this.backoff.duration();this._reconnecting=!0;var r=this.setTimeoutFn((function(){e.skipReconnect||(t.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((function(n){n?(e._reconnecting=!1,e.reconnect(),t.emitReserved("reconnect_error",n)):e.onreconnect()})))}),n);this.opts.autoUnref&&r.unref(),this.subs.push((function(){clearTimeout(r)}))}}},{key:"onreconnect",value:function(){var t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}]),s}(R),Nt={};function xt(e,n){"object"===t(e)&&(n=e,e=void 0);var r,o=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,r=t;n=n||"undefined"!=typeof location&&location,null==t&&(t=n.protocol+"//"+n.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?n.protocol+t:n.host+t),/^(https?|wss?):\/\//.test(t)||(t=void 0!==n?n.protocol+"//"+t:"https://"+t),r=v(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var o=-1!==r.host.indexOf(":")?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+o+":"+r.port+e,r.href=r.protocol+"://"+o+(n&&n.port===r.port?"":":"+r.port),r}(e,(n=n||{}).path||"/socket.io"),i=o.source,s=o.id,a=o.path,c=Nt[s]&&a in Nt[s].nsps;return n.forceNew||n["force new connection"]||!1===n.multiplex||c?r=new Bt(i,n):(Nt[s]||(Nt[s]=new Bt(i,n)),r=Nt[s]),o.query&&!n.query&&(n.query=o.queryKey),r.socket(o.path,n)}return o(xt,{Manager:Bt,Socket:Ct,io:xt,connect:xt}),xt})); //# sourceMappingURL=socket.io.min.js.map onionshare-2.6.3/cli/onionshare_cli/resources/templates/000077500000000000000000000000001475545702100234545ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/resources/templates/403.html000066400000000000000000000012331475545702100246470ustar00rootroot00000000000000 OnionShare: 403 Forbidden

    You are not allowed to perform that action at this time.

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/404.html000066400000000000000000000011561475545702100246540ustar00rootroot00000000000000 OnionShare: 404 Not Found

    404 Not Found

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/405.html000066400000000000000000000012001475545702100246430ustar00rootroot00000000000000 OnionShare: 405 Method Not Allowed

    405 Method Not Allowed

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/500.html000066400000000000000000000012701475545702100246460ustar00rootroot00000000000000 OnionShare: An error occurred

    Sorry, an unexpected error seems to have occurred, and your request didn't succeed.

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/chat.html000066400000000000000000000026641475545702100252710ustar00rootroot00000000000000 {% if title %}{{ title }}{% else %}OnionShare Chat{% endif %}

    {% if title %}{{ title }}{% else %}OnionShare Chat{% endif %}

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/denied.html000066400000000000000000000003461475545702100255750ustar00rootroot00000000000000 OnionShare

    OnionShare download in progress

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/listing.html000066400000000000000000000033301475545702100260120ustar00rootroot00000000000000 {% if title %}{{ title }}{% else %}OnionShare{% endif %}

    {% if title %}{{ title }}{% else %}OnionShare{% endif %}

    {% if breadcrumbs %} {% endif %}
    Filename
    Size
    {% for info in dirs %} {% endfor %} {% for info in files %}
    {{ info.size_human }}
    {% endfor %}
    onionshare-2.6.3/cli/onionshare_cli/resources/templates/receive.html000066400000000000000000000051431475545702100257670ustar00rootroot00000000000000 {% if title %}{{ title }}{% else %}OnionShare Dropbox{% endif %}

    {% if title %}{{ title }}{% else %}OnionShare Dropbox{% endif %}

    {% if not disable_text and not disable_files %}

    Submit Files or Messages

    You can submit files, a message, or both.

    Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.

    {% endif %} {% if not disable_text and disable_files %}

    Submit Messages

    You can submit a message.

    Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.

    {% endif %} {% if disable_text and not disable_files %}

    Submit Files

    You can submit files

    {% endif %}
      {% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %}
    • {{ message }}
    • {% endfor %} {% endif %} {% endwith %}
    {% if not disable_files %}

    {% endif %} {% if not disable_text %}

    {% endif %}

    onionshare-2.6.3/cli/onionshare_cli/resources/templates/send.html000066400000000000000000000046161475545702100253020ustar00rootroot00000000000000 {% if title %}{{ title }}{% else %}OnionShare{% endif %}

    {% if title %}{{ title }}{% else %}OnionShare{% endif %}

    Total size: {{ filesize_human }} {% if is_zipped %} (compressed){% endif %}
    Download Files
    {% if breadcrumbs %} {% endif %}
    Filename
    Size
    {% for info in dirs %} {% endfor %} {% for info in files %}
    {% if download_individual_files %} {{ info.basename }} {% else %} {{ info.basename }} {% endif %}
    {{ info.size_human }}
    {% endfor %}
    onionshare-2.6.3/cli/onionshare_cli/resources/templates/thankyou.html000066400000000000000000000016001475545702100262010ustar00rootroot00000000000000 OnionShare is closed

    {% if title %}{{ title }}{% else %}OnionShare{% endif %}

    Thank you for using OnionShare

    You may now close this window.

    onionshare-2.6.3/cli/onionshare_cli/resources/torrc_template000066400000000000000000000014771475545702100244360ustar00rootroot00000000000000DataDirectory {{data_directory}} SocksPort {{socks_port}} CookieAuthentication 1 CookieAuthFile {{cookie_auth_file}} AvoidDiskWrites 1 Log notice stdout GeoIPFile {{geo_ip_file}} GeoIPv6File {{geo_ipv6_file}} # Bridge configurations ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit exec {{obfs4proxy_path}} ClientTransportPlugin snowflake exec {{snowflake_path}} -url https://snowflake-broker.torproject.net.global.prod.fastly.net/ -front cdn.sstatic.net -ice stun:stun.l.google.com:19302,stun:stun.voip.blackberry.com:3478,stun:stun.altar.com.pl:3478,stun:stun.antisip.com:3478,stun:stun.bluesip.net:3478,stun:stun.dus.net:3478,stun:stun.epygi.com:3478,stun:stun.sonetel.com:3478,stun:stun.sonetel.net:3478,stun:stun.stunprotocol.org:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.voys.nl:3478 onionshare-2.6.3/cli/onionshare_cli/resources/torrc_template-meek_lite_azure000066400000000000000000000002321475545702100275640ustar00rootroot00000000000000# Enable built-in meek-azure bridge Bridge meek_lite 192.0.2.20:80 url=https://1314488750.rsc.cdn77.org front=www.phpmyadmin.net utls=HelloRandomizedALPN onionshare-2.6.3/cli/onionshare_cli/resources/torrc_template-obfs4000066400000000000000000000033741475545702100254470ustar00rootroot00000000000000# Enable built-in obfs4 bridge Bridge obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0 Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cert=4TLQPJrTSaDffMK7Nbao6LC7G9OW/NHkUwIdjLSS3KYf0Nv4/nQiiI8dY2TcsQx01NniOg iat-mode=0 Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0 Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0 Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0 Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0 Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 onionshare-2.6.3/cli/onionshare_cli/resources/torrc_template-snowflake000066400000000000000000000016631475545702100264220ustar00rootroot00000000000000# Enable built-in snowflake bridge Bridge snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72 fingerprint=2B280B23E1107BB62ABFC40DDCC8824814F80A72 url=https://1098762253.rsc.cdn77.org/ fronts=www.cdn77.com,www.phpmyadmin.net ice=stun:stun.antisip.com:3478,stun:stun.epygi.com:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.mixvoip.com:3478,stun:stun.nextcloud.com:3478,stun:stun.bethesda.net:3478,stun:stun.nextcloud.com:443 utls-imitate=hellorandomizedalpn Bridge snowflake 192.0.2.4:80 8838024498816A039FCBBAB14E6F40A0843051FA fingerprint=8838024498816A039FCBBAB14E6F40A0843051FA url=https://1098762253.rsc.cdn77.org/ fronts=www.cdn77.com,www.phpmyadmin.net ice=stun:stun.antisip.com:3478,stun:stun.epygi.com:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.mixvoip.com:3478,stun:stun.nextcloud.com:3478,stun:stun.bethesda.net:3478,stun:stun.nextcloud.com:443 utls-imitate=hellorandomizedalpn onionshare-2.6.3/cli/onionshare_cli/resources/version.txt000066400000000000000000000000061475545702100237000ustar00rootroot000000000000002.6.3 onionshare-2.6.3/cli/onionshare_cli/resources/wordlist.txt000066400000000000000000001713001475545702100240700ustar00rootroot00000000000000abacus abdomen abdominal abide abiding ability ablaze able abnormal abrasion abrasive abreast abridge abroad abruptly absence absentee absently absinthe absolute absolve abstain abstract absurd accent acclaim acclimate accompany account accuracy accurate accustom acetone achiness aching acid acorn acquaint acquire acre acrobat acronym acting action activate activator active activism activist activity actress acts acutely acuteness aeration aerobics aerosol aerospace afar affair affected affecting affection affidavit affiliate affirm affix afflicted affluent afford affront aflame afloat aflutter afoot afraid afterglow afterlife aftermath aftermost afternoon aged ageless agency agenda agent aggregate aghast agile agility aging agnostic agonize agonizing agony agreeable agreeably agreed agreeing agreement aground ahead ahoy aide aids aim ajar alabaster alarm albatross album alfalfa algebra algorithm alias alibi alienable alienate aliens alike alive alkaline alkalize almanac almighty almost aloe aloft aloha alone alongside aloof alphabet alright although altitude alto aluminum alumni always amaretto amaze amazingly amber ambiance ambiguity ambiguous ambition ambitious ambulance ambush amendable amendment amends amenity amiable amicably amid amigo amino amiss ammonia ammonium amnesty amniotic among amount amperage ample amplifier amplify amply amuck amulet amusable amused amusement amuser amusing anaconda anaerobic anagram anatomist anatomy anchor anchovy ancient android anemia anemic aneurism anew angelfish angelic anger angled angler angles angling angrily angriness anguished angular animal animate animating animation animator anime animosity ankle annex annotate announcer annoying annually annuity anointer another answering antacid antarctic anteater antelope antennae anthem anthill anthology antibody antics antidote antihero antiquely antiques antiquity antirust antitoxic antitrust antiviral antivirus antler antonym antsy anvil anybody anyhow anymore anyone anyplace anything anytime anyway anywhere aorta apache apostle appealing appear appease appeasing appendage appendix appetite appetizer applaud applause apple appliance applicant applied apply appointee appraisal appraiser apprehend approach approval approve apricot april apron aptitude aptly aqua aqueduct arbitrary arbitrate ardently area arena arguable arguably argue arise armadillo armband armchair armed armful armhole arming armless armoire armored armory armrest army aroma arose around arousal arrange array arrest arrival arrive arrogance arrogant arson art ascend ascension ascent ascertain ashamed ashen ashes ashy aside askew asleep asparagus aspect aspirate aspire aspirin astonish astound astride astrology astronaut astronomy astute atlantic atlas atom atonable atop atrium atrocious atrophy attach attain attempt attendant attendee attention attentive attest attic attire attitude attractor attribute atypical auction audacious audacity audible audibly audience audio audition augmented august authentic author autism autistic autograph automaker automated automatic autopilot available avalanche avatar avenge avenging avenue average aversion avert aviation aviator avid avoid await awaken award aware awhile awkward awning awoke awry axis babble babbling babied baboon backache backboard backboned backdrop backed backer backfield backfire backhand backing backlands backlash backless backlight backlit backlog backpack backpedal backrest backroom backshift backside backslid backspace backspin backstab backstage backtalk backtrack backup backward backwash backwater backyard bacon bacteria bacterium badass badge badland badly badness baffle baffling bagel bagful baggage bagged baggie bagginess bagging baggy bagpipe baguette baked bakery bakeshop baking balance balancing balcony balmy balsamic bamboo banana banish banister banjo bankable bankbook banked banker banking banknote bankroll banner bannister banshee banter barbecue barbed barbell barber barcode barge bargraph barista baritone barley barmaid barman barn barometer barrack barracuda barrel barrette barricade barrier barstool bartender barterer bash basically basics basil basin basis basket batboy batch bath baton bats battalion battered battering battery batting battle bauble bazooka blabber bladder blade blah blame blaming blanching blandness blank blaspheme blasphemy blast blatancy blatantly blazer blazing bleach bleak bleep blemish blend bless blighted blimp bling blinked blinker blinking blinks blip blissful blitz blizzard bloated bloating blob blog bloomers blooming blooper blot blouse blubber bluff bluish blunderer blunt blurb blurred blurry blurt blush blustery boaster boastful boasting boat bobbed bobbing bobble bobcat bobsled bobtail bodacious body bogged boggle bogus boil bok bolster bolt bonanza bonded bonding bondless boned bonehead boneless bonelike boney bonfire bonnet bonsai bonus bony boogeyman boogieman book boondocks booted booth bootie booting bootlace bootleg boots boozy borax boring borough borrower borrowing boss botanical botanist botany botch both bottle bottling bottom bounce bouncing bouncy bounding boundless bountiful bovine boxcar boxer boxing boxlike boxy breach breath breeches breeching breeder breeding breeze breezy brethren brewery brewing briar bribe brick bride bridged brigade bright brilliant brim bring brink brisket briskly briskness bristle brittle broadband broadcast broaden broadly broadness broadside broadways broiler broiling broken broker bronchial bronco bronze bronzing brook broom brought browbeat brownnose browse browsing bruising brunch brunette brunt brush brussels brute brutishly bubble bubbling bubbly buccaneer bucked bucket buckle buckshot buckskin bucktooth buckwheat buddhism buddhist budding buddy budget buffalo buffed buffer buffing buffoon buggy bulb bulge bulginess bulgur bulk bulldog bulldozer bullfight bullfrog bullhorn bullion bullish bullpen bullring bullseye bullwhip bully bunch bundle bungee bunion bunkbed bunkhouse bunkmate bunny bunt busboy bush busily busload bust busybody buzz cabana cabbage cabbie cabdriver cable caboose cache cackle cacti cactus caddie caddy cadet cadillac cadmium cage cahoots cake calamari calamity calcium calculate calculus caliber calibrate calm caloric calorie calzone camcorder cameo camera camisole camper campfire camping campsite campus canal canary cancel candied candle candy cane canine canister cannabis canned canning cannon cannot canola canon canopener canopy canteen canyon capable capably capacity cape capillary capital capitol capped capricorn capsize capsule caption captivate captive captivity capture caramel carat caravan carbon cardboard carded cardiac cardigan cardinal cardstock carefully caregiver careless caress caretaker cargo caring carless carload carmaker carnage carnation carnival carnivore carol carpenter carpentry carpool carport carried carrot carrousel carry cartel cartload carton cartoon cartridge cartwheel carve carving carwash cascade case cash casing casino casket cassette casually casualty catacomb catalog catalyst catalyze catapult cataract catatonic catcall catchable catcher catching catchy caterer catering catfight catfish cathedral cathouse catlike catnap catnip catsup cattail cattishly cattle catty catwalk caucasian caucus causal causation cause causing cauterize caution cautious cavalier cavalry caviar cavity cedar celery celestial celibacy celibate celtic cement census ceramics ceremony certainly certainty certified certify cesarean cesspool chafe chaffing chain chair chalice challenge chamber chamomile champion chance change channel chant chaos chaperone chaplain chapped chaps chapter character charbroil charcoal charger charging chariot charity charm charred charter charting chase chasing chaste chastise chastity chatroom chatter chatting chatty cheating cheddar cheek cheer cheese cheesy chef chemicals chemist chemo cherisher cherub chess chest chevron chevy chewable chewer chewing chewy chief chihuahua childcare childhood childish childless childlike chili chill chimp chip chirping chirpy chitchat chivalry chive chloride chlorine choice chokehold choking chomp chooser choosing choosy chop chosen chowder chowtime chrome chubby chuck chug chummy chump chunk churn chute cider cilantro cinch cinema cinnamon circle circling circular circulate circus citable citadel citation citizen citric citrus city civic civil clad claim clambake clammy clamor clamp clamshell clang clanking clapped clapper clapping clarify clarinet clarity clash clasp class clatter clause clavicle claw clay clean clear cleat cleaver cleft clench clergyman clerical clerk clever clicker client climate climatic cling clinic clinking clip clique cloak clobber clock clone cloning closable closure clothes clothing cloud clover clubbed clubbing clubhouse clump clumsily clumsy clunky clustered clutch clutter coach coagulant coastal coaster coasting coastland coastline coat coauthor cobalt cobbler cobweb cocoa coconut cod coeditor coerce coexist coffee cofounder cognition cognitive cogwheel coherence coherent cohesive coil coke cola cold coleslaw coliseum collage collapse collar collected collector collide collie collision colonial colonist colonize colony colossal colt coma come comfort comfy comic coming comma commence commend comment commerce commode commodity commodore common commotion commute commuting compacted compacter compactly compactor companion company compare compel compile comply component composed composer composite compost composure compound compress comprised computer computing comrade concave conceal conceded concept concerned concert conch concierge concise conclude concrete concur condense condiment condition condone conducive conductor conduit cone confess confetti confidant confident confider confiding configure confined confining confirm conflict conform confound confront confused confusing confusion congenial congested congrats congress conical conjoined conjure conjuror connected connector consensus consent console consoling consonant constable constant constrain constrict construct consult consumer consuming contact container contempt contend contented contently contents contest context contort contour contrite control contusion convene convent copartner cope copied copier copilot coping copious copper copy coral cork cornball cornbread corncob cornea corned corner cornfield cornflake cornhusk cornmeal cornstalk corny coronary coroner corporal corporate corral correct corridor corrode corroding corrosive corsage corset cortex cosigner cosmetics cosmic cosmos cosponsor cost cottage cotton couch cough could countable countdown counting countless country county courier covenant cover coveted coveting coyness cozily coziness cozy crabbing crabgrass crablike crabmeat cradle cradling crafter craftily craftsman craftwork crafty cramp cranberry crane cranial cranium crank crate crave craving crawfish crawlers crawling crayfish crayon crazed crazily craziness crazy creamed creamer creamlike crease creasing creatable create creation creative creature credible credibly credit creed creme creole crepe crept crescent crested cresting crestless crevice crewless crewman crewmate crib cricket cried crier crimp crimson cringe cringing crinkle crinkly crisped crisping crisply crispness crispy criteria critter croak crock crook croon crop cross crouch crouton crowbar crowd crown crucial crudely crudeness cruelly cruelness cruelty crumb crummiest crummy crumpet crumpled cruncher crunching crunchy crusader crushable crushed crusher crushing crust crux crying cryptic crystal cubbyhole cube cubical cubicle cucumber cuddle cuddly cufflink culinary culminate culpable culprit cultivate cultural culture cupbearer cupcake cupid cupped cupping curable curator curdle cure curfew curing curled curler curliness curling curly curry curse cursive cursor curtain curtly curtsy curvature curve curvy cushy cusp cussed custard custodian custody customary customer customize customs cut cycle cyclic cycling cyclist cylinder cymbal cytoplasm cytoplast dab dad daffodil dagger daily daintily dainty dairy daisy dallying dance dancing dandelion dander dandruff dandy danger dangle dangling daredevil dares daringly darkened darkening darkish darkness darkroom darling darn dart darwinism dash dastardly data datebook dating daughter daunting dawdler dawn daybed daybreak daycare daydream daylight daylong dayroom daytime dazzler dazzling deacon deafening deafness dealer dealing dealmaker dealt dean debatable debate debating debit debrief debtless debtor debug debunk decade decaf decal decathlon decay deceased deceit deceiver deceiving december decency decent deception deceptive decibel decidable decimal decimeter decipher deck declared decline decode decompose decorated decorator decoy decrease decree dedicate dedicator deduce deduct deed deem deepen deeply deepness deface defacing defame default defeat defection defective defendant defender defense defensive deferral deferred defiance defiant defile defiling define definite deflate deflation deflator deflected deflector defog deforest defraud defrost deftly defuse defy degraded degrading degrease degree dehydrate deity dejected delay delegate delegator delete deletion delicacy delicate delicious delighted delirious delirium deliverer delivery delouse delta deluge delusion deluxe demanding demeaning demeanor demise democracy democrat demote demotion demystify denatured deniable denial denim denote dense density dental dentist denture deny deodorant deodorize departed departure depict deplete depletion deplored deploy deport depose depraved depravity deprecate depress deprive depth deputize deputy derail deranged derby derived desecrate deserve deserving designate designed designer designing deskbound desktop deskwork desolate despair despise despite destiny destitute destruct detached detail detection detective detector detention detergent detest detonate detonator detoxify detract deuce devalue deviancy deviant deviate deviation deviator device devious devotedly devotee devotion devourer devouring devoutly dexterity dexterous diabetes diabetic diabolic diagnoses diagnosis diagram dial diameter diaper diaphragm diary dice dicing dictate dictation dictator difficult diffused diffuser diffusion diffusive dig dilation diligence diligent dill dilute dime diminish dimly dimmed dimmer dimness dimple diner dingbat dinghy dinginess dingo dingy dining dinner diocese dioxide diploma dipped dipper dipping directed direction directive directly directory direness dirtiness disabled disagree disallow disarm disarray disaster disband disbelief disburse discard discern discharge disclose discolor discount discourse discover discuss disdain disengage disfigure disgrace dish disinfect disjoin disk dislike disliking dislocate dislodge disloyal dismantle dismay dismiss dismount disobey disorder disown disparate disparity dispatch dispense dispersal dispersed disperser displace display displease disposal dispose disprove dispute disregard disrupt dissuade distance distant distaste distill distinct distort distract distress district distrust ditch ditto ditzy dividable divided dividend dividers dividing divinely diving divinity divisible divisibly division divisive divorcee dizziness dizzy doable docile dock doctrine document dodge dodgy doily doing dole dollar dollhouse dollop dolly dolphin domain domelike domestic dominion dominoes donated donation donator donor donut doodle doorbell doorframe doorknob doorman doormat doornail doorpost doorstep doorstop doorway doozy dork dormitory dorsal dosage dose dotted doubling douche dove down dowry doze drab dragging dragonfly dragonish dragster drainable drainage drained drainer drainpipe dramatic dramatize drank drapery drastic draw dreaded dreadful dreadlock dreamboat dreamily dreamland dreamless dreamlike dreamt dreamy drearily dreary drench dress drew dribble dried drier drift driller drilling drinkable drinking dripping drippy drivable driven driver driveway driving drizzle drizzly drone drool droop drop-down dropbox dropkick droplet dropout dropper drove drown drowsily drudge drum dry dubbed dubiously duchess duckbill ducking duckling ducktail ducky duct dude duffel dugout duh duke duller dullness duly dumping dumpling dumpster duo dupe duplex duplicate duplicity durable durably duration duress during dusk dust dutiful duty duvet dwarf dweeb dwelled dweller dwelling dwindle dwindling dynamic dynamite dynasty dyslexia dyslexic each eagle earache eardrum earflap earful earlobe early earmark earmuff earphone earpiece earplugs earring earshot earthen earthlike earthling earthly earthworm earthy earwig easeful easel easiest easily easiness easing eastbound eastcoast easter eastward eatable eaten eatery eating eats ebay ebony ebook ecard eccentric echo eclair eclipse ecologist ecology economic economist economy ecosphere ecosystem edge edginess edging edgy edition editor educated education educator eel effective effects efficient effort eggbeater egging eggnog eggplant eggshell egomaniac egotism egotistic either eject elaborate elastic elated elbow eldercare elderly eldest electable election elective elephant elevate elevating elevation elevator eleven elf eligible eligibly eliminate elite elitism elixir elk ellipse elliptic elm elongated elope eloquence eloquent elsewhere elude elusive elves email embargo embark embassy embattled embellish ember embezzle emblaze emblem embody embolism emboss embroider emcee emerald emergency emission emit emote emoticon emotion empathic empathy emperor emphases emphasis emphasize emphatic empirical employed employee employer emporium empower emptier emptiness empty emu enable enactment enamel enchanted enchilada encircle enclose enclosure encode encore encounter encourage encroach encrust encrypt endanger endeared endearing ended ending endless endnote endocrine endorphin endorse endowment endpoint endurable endurance enduring energetic energize energy enforced enforcer engaged engaging engine engorge engraved engraver engraving engross engulf enhance enigmatic enjoyable enjoyably enjoyer enjoying enjoyment enlarged enlarging enlighten enlisted enquirer enrage enrich enroll enslave ensnare ensure entail entangled entering entertain enticing entire entitle entity entomb entourage entrap entree entrench entrust entryway entwine enunciate envelope enviable enviably envious envision envoy envy enzyme epic epidemic epidermal epidermis epidural epilepsy epileptic epilogue epiphany episode equal equate equation equator equinox equipment equity equivocal eradicate erasable erased eraser erasure ergonomic errand errant erratic error erupt escalate escalator escapable escapade escapist escargot eskimo esophagus espionage espresso esquire essay essence essential establish estate esteemed estimate estimator estranged estrogen etching eternal eternity ethanol ether ethically ethics euphemism evacuate evacuee evade evaluate evaluator evaporate evasion evasive even everglade evergreen everybody everyday everyone evict evidence evident evil evoke evolution evolve exact exalted example excavate excavator exceeding exception excess exchange excitable exciting exclaim exclude excluding exclusion exclusive excretion excretory excursion excusable excusably excuse exemplary exemplify exemption exerciser exert exes exfoliate exhale exhaust exhume exile existing exit exodus exonerate exorcism exorcist expand expanse expansion expansive expectant expedited expediter expel expend expenses expensive expert expire expiring explain expletive explicit explode exploit explore exploring exponent exporter exposable expose exposure express expulsion exquisite extended extending extent extenuate exterior external extinct extortion extradite extras extrovert extrude extruding exuberant fable fabric fabulous facebook facecloth facedown faceless facelift faceplate faceted facial facility facing facsimile faction factoid factor factsheet factual faculty fade fading failing falcon fall false falsify fame familiar family famine famished fanatic fancied fanciness fancy fanfare fang fanning fantasize fantastic fantasy fascism fastball faster fasting fastness faucet favorable favorably favored favoring favorite fax feast federal fedora feeble feed feel feisty feline felt-tip feminine feminism feminist feminize femur fence fencing fender ferment fernlike ferocious ferocity ferret ferris ferry fervor fester festival festive festivity fetal fetch fever fiber fiction fiddle fiddling fidelity fidgeting fidgety fifteen fifth fiftieth fifty figment figure figurine filing filled filler filling film filter filth filtrate finale finalist finalize finally finance financial finch fineness finer finicky finished finisher finishing finite finless finlike fiscally fit five flaccid flagman flagpole flagship flagstick flagstone flail flakily flaky flame flammable flanked flanking flannels flap flaring flashback flashbulb flashcard flashily flashing flashy flask flatbed flatfoot flatly flatness flatten flattered flatterer flattery flattop flatware flatworm flavored flavorful flavoring flaxseed fled fleshed fleshy flick flier flight flinch fling flint flip flirt float flock flogging flop floral florist floss flounder flyable flyaway flyer flying flyover flypaper foam foe fog foil folic folk follicle follow fondling fondly fondness fondue font food fool footage football footbath footboard footer footgear foothill foothold footing footless footman footnote footpad footpath footprint footrest footsie footsore footwear footwork fossil foster founder founding fountain fox foyer fraction fracture fragile fragility fragment fragrance fragrant frail frame framing frantic fraternal frayed fraying frays freckled freckles freebase freebee freebie freedom freefall freehand freeing freeload freely freemason freeness freestyle freeware freeway freewill freezable freezing freight french frenzied frenzy frequency frequent fresh fretful fretted friction friday fridge fried friend frighten frightful frigidity frigidly frill fringe frisbee frisk fritter frivolous frolic from front frostbite frosted frostily frosting frostlike frosty froth frown frozen fructose frugality frugally fruit frustrate frying gab gaffe gag gainfully gaining gains gala gallantly galleria gallery galley gallon gallows gallstone galore galvanize gambling game gaming gamma gander gangly gangrene gangway gap garage garbage garden gargle garland garlic garment garnet garnish garter gas gatherer gathering gating gauging gauntlet gauze gave gawk gazing gear gecko geek geiger gem gender generic generous genetics genre gentile gentleman gently gents geography geologic geologist geology geometric geometry geranium gerbil geriatric germicide germinate germless germproof gestate gestation gesture getaway getting getup giant gibberish giblet giddily giddiness giddy gift gigabyte gigahertz gigantic giggle giggling giggly gigolo gilled gills gimmick girdle giveaway given giver giving gizmo gizzard glacial glacier glade gladiator gladly glamorous glamour glance glancing glandular glare glaring glass glaucoma glazing gleaming gleeful glider gliding glimmer glimpse glisten glitch glitter glitzy gloater gloating gloomily gloomy glorified glorifier glorify glorious glory gloss glove glowing glowworm glucose glue gluten glutinous glutton gnarly gnat goal goatskin goes goggles going goldfish goldmine goldsmith golf goliath gonad gondola gone gong good gooey goofball goofiness goofy google goon gopher gore gorged gorgeous gory gosling gossip gothic gotten gout gown grab graceful graceless gracious gradation graded grader gradient grading gradually graduate graffiti grafted grafting grain granddad grandkid grandly grandma grandpa grandson granite granny granola grant granular grape graph grapple grappling grasp grass gratified gratify grating gratitude gratuity gravel graveness graves graveyard gravitate gravity gravy gray grazing greasily greedily greedless greedy green greeter greeting grew greyhound grid grief grievance grieving grievous grill grimace grimacing grime griminess grimy grinch grinning grip gristle grit groggily groggy groin groom groove grooving groovy grope ground grouped grout grove grower growing growl grub grudge grudging grueling gruffly grumble grumbling grumbly grumpily grunge grunt guacamole guidable guidance guide guiding guileless guise gulf gullible gully gulp gumball gumdrop gumminess gumming gummy gurgle gurgling guru gush gusto gusty gutless guts gutter guy guzzler gyration habitable habitant habitat habitual hacked hacker hacking hacksaw had haggler haiku half halogen halt halved halves hamburger hamlet hammock hamper hamster hamstring handbag handball handbook handbrake handcart handclap handclasp handcraft handcuff handed handful handgrip handgun handheld handiness handiwork handlebar handled handler handling handmade handoff handpick handprint handrail handsaw handset handsfree handshake handstand handwash handwork handwoven handwrite handyman hangnail hangout hangover hangup hankering hankie hanky haphazard happening happier happiest happily happiness happy harbor hardcopy hardcore hardcover harddisk hardened hardener hardening hardhat hardhead hardiness hardly hardness hardship hardware hardwired hardwood hardy harmful harmless harmonica harmonics harmonize harmony harness harpist harsh harvest hash hassle haste hastily hastiness hasty hatbox hatchback hatchery hatchet hatching hatchling hate hatless hatred haunt haven hazard hazelnut hazily haziness hazing hazy headache headband headboard headcount headdress headed header headfirst headgear heading headlamp headless headlock headphone headpiece headrest headroom headscarf headset headsman headstand headstone headway headwear heap heat heave heavily heaviness heaving hedge hedging heftiness hefty helium helmet helper helpful helping helpless helpline hemlock hemstitch hence henchman henna herald herbal herbicide herbs heritage hermit heroics heroism herring herself hertz hesitancy hesitant hesitate hexagon hexagram hubcap huddle huddling huff hug hula hulk hull human humble humbling humbly humid humiliate humility humming hummus humongous humorist humorless humorous humpback humped humvee hunchback hundredth hunger hungrily hungry hunk hunter hunting huntress huntsman hurdle hurled hurler hurling hurray hurricane hurried hurry hurt husband hush husked huskiness hut hybrid hydrant hydrated hydration hydrogen hydroxide hyperlink hypertext hyphen hypnoses hypnosis hypnotic hypnotism hypnotist hypnotize hypocrisy hypocrite ibuprofen ice iciness icing icky icon icy idealism idealist idealize ideally idealness identical identify identity ideology idiocy idiom idly igloo ignition ignore iguana illicitly illusion illusive image imaginary imagines imaging imbecile imitate imitation immature immerse immersion imminent immobile immodest immorally immortal immovable immovably immunity immunize impaired impale impart impatient impeach impeding impending imperfect imperial impish implant implement implicate implicit implode implosion implosive imply impolite important importer impose imposing impotence impotency impotent impound imprecise imprint imprison impromptu improper improve improving improvise imprudent impulse impulsive impure impurity iodine iodize ion ipad iphone ipod irate irk iron irregular irrigate irritable irritably irritant irritate islamic islamist isolated isolating isolation isotope issue issuing italicize italics item itinerary itunes ivory ivy jab jackal jacket jackknife jackpot jailbird jailbreak jailer jailhouse jalapeno jam janitor january jargon jarring jasmine jaundice jaunt java jawed jawless jawline jaws jaybird jaywalker jazz jeep jeeringly jellied jelly jersey jester jet jiffy jigsaw jimmy jingle jingling jinx jitters jittery job jockey jockstrap jogger jogging john joining jokester jokingly jolliness jolly jolt jot jovial joyfully joylessly joyous joyride joystick jubilance jubilant judge judgingly judicial judiciary judo juggle juggling jugular juice juiciness juicy jujitsu jukebox july jumble jumbo jump junction juncture june junior juniper junkie junkman junkyard jurist juror jury justice justifier justify justly justness juvenile kabob kangaroo karaoke karate karma kebab keenly keenness keep keg kelp kennel kept kerchief kerosene kettle kick kiln kilobyte kilogram kilometer kilowatt kilt kimono kindle kindling kindly kindness kindred kinetic kinfolk king kinship kinsman kinswoman kissable kisser kissing kitchen kite kitten kitty kiwi kleenex knapsack knee knelt knickers knoll koala kooky kosher krypton kudos kung labored laborer laboring laborious labrador ladder ladies ladle ladybug ladylike lagged lagging lagoon lair lake lance landed landfall landfill landing landlady landless landline landlord landmark landmass landmine landowner landscape landside landslide language lankiness lanky lantern lapdog lapel lapped lapping laptop lard large lark lash lasso last latch late lather latitude latrine latter latticed launch launder laundry laurel lavender lavish laxative lazily laziness lazy lecturer left legacy legal legend legged leggings legible legibly legislate lego legroom legume legwarmer legwork lemon lend length lens lent leotard lesser letdown lethargic lethargy letter lettuce level leverage levers levitate levitator liability liable liberty librarian library licking licorice lid life lifter lifting liftoff ligament likely likeness likewise liking lilac lilly lily limb limeade limelight limes limit limping limpness line lingo linguini linguist lining linked linoleum linseed lint lion lip liquefy liqueur liquid lisp list litigate litigator litmus litter little livable lived lively liver livestock lividly living lizard lubricant lubricate lucid luckily luckiness luckless lucrative ludicrous lugged lukewarm lullaby lumber luminance luminous lumpiness lumping lumpish lunacy lunar lunchbox luncheon lunchroom lunchtime lung lurch lure luridness lurk lushly lushness luster lustfully lustily lustiness lustrous lusty luxurious luxury lying lyrically lyricism lyricist lyrics macarena macaroni macaw mace machine machinist magazine magenta maggot magical magician magma magnesium magnetic magnetism magnetize magnifier magnify magnitude magnolia mahogany maimed majestic majesty majorette majority makeover maker makeshift making malformed malt mama mammal mammary mammogram manager managing manatee mandarin mandate mandatory mandolin manger mangle mango mangy manhandle manhole manhood manhunt manicotti manicure manifesto manila mankind manlike manliness manly manmade manned mannish manor manpower mantis mantra manual many map marathon marauding marbled marbles marbling march mardi margarine margarita margin marigold marina marine marital maritime marlin marmalade maroon married marrow marry marshland marshy marsupial marvelous marxism mascot masculine mashed mashing massager masses massive mastiff matador matchbook matchbox matcher matching matchless material maternal maternity math mating matriarch matrimony matrix matron matted matter maturely maturing maturity mauve maverick maximize maximum maybe mayday mayflower moaner moaning mobile mobility mobilize mobster mocha mocker mockup modified modify modular modulator module moisten moistness moisture molar molasses mold molecular molecule molehill mollusk mom monastery monday monetary monetize moneybags moneyless moneywise mongoose mongrel monitor monkhood monogamy monogram monologue monopoly monorail monotone monotype monoxide monsieur monsoon monstrous monthly monument moocher moodiness moody mooing moonbeam mooned moonlight moonlike moonlit moonrise moonscape moonshine moonstone moonwalk mop morale morality morally morbidity morbidly morphine morphing morse mortality mortally mortician mortified mortify mortuary mosaic mossy most mothball mothproof motion motivate motivator motive motocross motor motto mountable mountain mounted mounting mourner mournful mouse mousiness moustache mousy mouth movable move movie moving mower mowing much muck mud mug mulberry mulch mule mulled mullets multiple multiply multitask multitude mumble mumbling mumbo mummified mummify mummy mumps munchkin mundane municipal muppet mural murkiness murky murmuring muscular museum mushily mushiness mushroom mushy music musket muskiness musky mustang mustard muster mustiness musty mutable mutate mutation mute mutilated mutilator mutiny mutt mutual muzzle myself myspace mystified mystify myth nacho nag nail name naming nanny nanometer nape napkin napped napping nappy narrow nastily nastiness national native nativity natural nature naturist nautical navigate navigator navy nearby nearest nearly nearness neatly neatness nebula nebulizer nectar negate negation negative neglector negligee negligent negotiate nemeses nemesis neon nephew nerd nervous nervy nest net neurology neuron neurosis neurotic neuter neutron never next nibble nickname nicotine niece nifty nimble nimbly nineteen ninetieth ninja nintendo ninth nuclear nuclei nucleus nugget nullify number numbing numbly numbness numeral numerate numerator numeric numerous nuptials nursery nursing nurture nutcase nutlike nutmeg nutrient nutshell nuttiness nutty nuzzle nylon oaf oak oasis oat obedience obedient obituary object obligate obliged oblivion oblivious oblong obnoxious oboe obscure obscurity observant observer observing obsessed obsession obsessive obsolete obstacle obstinate obstruct obtain obtrusive obtuse obvious occultist occupancy occupant occupier occupy ocean ocelot octagon octane october octopus ogle oil oink ointment okay old olive olympics omega omen ominous omission omit omnivore onboard oncoming ongoing onion online onlooker only onscreen onset onshore onslaught onstage onto onward onyx oops ooze oozy opacity opal open operable operate operating operation operative operator opium opossum opponent oppose opposing opposite oppressed oppressor opt opulently osmosis other otter ouch ought ounce outage outback outbid outboard outbound outbreak outburst outcast outclass outcome outdated outdoors outer outfield outfit outflank outgoing outgrow outhouse outing outlast outlet outline outlook outlying outmatch outmost outnumber outplayed outpost outpour output outrage outrank outreach outright outscore outsell outshine outshoot outsider outskirts outsmart outsource outspoken outtakes outthink outward outweigh outwit oval ovary oven overact overall overarch overbid overbill overbite overblown overboard overbook overbuilt overcast overcoat overcome overcook overcrowd overdraft overdrawn overdress overdrive overdue overeager overeater overexert overfed overfeed overfill overflow overfull overgrown overhand overhang overhaul overhead overhear overheat overhung overjoyed overkill overlabor overlaid overlap overlay overload overlook overlord overlying overnight overpass overpay overplant overplay overpower overprice overrate overreach overreact override overripe overrule overrun overshoot overshot oversight oversized oversleep oversold overspend overstate overstay overstep overstock overstuff oversweet overtake overthrow overtime overtly overtone overture overturn overuse overvalue overview overwrite owl oxford oxidant oxidation oxidize oxidizing oxygen oxymoron oyster ozone paced pacemaker pacific pacifier pacifism pacifist pacify padded padding paddle paddling padlock pagan pager paging pajamas palace palatable palm palpable palpitate paltry pampered pamperer pampers pamphlet panama pancake pancreas panda pandemic pang panhandle panic panning panorama panoramic panther pantomime pantry pants pantyhose paparazzi papaya paper paprika papyrus parabola parachute parade paradox paragraph parakeet paralegal paralyses paralysis paralyze paramedic parameter paramount parasail parasite parasitic parcel parched parchment pardon parish parka parking parkway parlor parmesan parole parrot parsley parsnip partake parted parting partition partly partner partridge party passable passably passage passcode passenger passerby passing passion passive passivism passover passport password pasta pasted pastel pastime pastor pastrami pasture pasty patchwork patchy paternal paternity path patience patient patio patriarch patriot patrol patronage patronize pauper pavement paver pavestone pavilion paving pawing payable payback paycheck payday payee payer paying payment payphone payroll pebble pebbly pecan pectin peculiar peddling pediatric pedicure pedigree pedometer pegboard pelican pellet pelt pelvis penalize penalty pencil pendant pending penholder penknife pennant penniless penny penpal pension pentagon pentagram pep perceive percent perch percolate perennial perfected perfectly perfume periscope perish perjurer perjury perkiness perky perm peroxide perpetual perplexed persecute persevere persuaded persuader pesky peso pessimism pessimist pester pesticide petal petite petition petri petroleum petted petticoat pettiness petty petunia phantom phobia phoenix phonebook phoney phonics phoniness phony phosphate photo phrase phrasing placard placate placidly plank planner plant plasma plaster plastic plated platform plating platinum platonic platter platypus plausible plausibly playable playback player playful playgroup playhouse playing playlist playmaker playmate playoff playpen playroom playset plaything playtime plaza pleading pleat pledge plentiful plenty plethora plexiglas pliable plod plop plot plow ploy pluck plug plunder plunging plural plus plutonium plywood poach pod poem poet pogo pointed pointer pointing pointless pointy poise poison poker poking polar police policy polio polish politely polka polo polyester polygon polygraph polymer poncho pond pony popcorn pope poplar popper poppy popsicle populace popular populate porcupine pork porous porridge portable portal portfolio porthole portion portly portside poser posh posing possible possibly possum postage postal postbox postcard posted poster posting postnasal posture postwar pouch pounce pouncing pound pouring pout powdered powdering powdery power powwow pox praising prance prancing pranker prankish prankster prayer praying preacher preaching preachy preamble precinct precise precision precook precut predator predefine predict preface prefix preflight preformed pregame pregnancy pregnant preheated prelaunch prelaw prelude premiere premises premium prenatal preoccupy preorder prepaid prepay preplan preppy preschool prescribe preseason preset preshow president presoak press presume presuming preteen pretended pretender pretense pretext pretty pretzel prevail prevalent prevent preview previous prewar prewashed prideful pried primal primarily primary primate primer primp princess print prior prism prison prissy pristine privacy private privatize prize proactive probable probably probation probe probing probiotic problem procedure process proclaim procreate procurer prodigal prodigy produce product profane profanity professed professor profile profound profusely progeny prognosis program progress projector prologue prolonged promenade prominent promoter promotion prompter promptly prone prong pronounce pronto proofing proofread proofs propeller properly property proponent proposal propose props prorate protector protegee proton prototype protozoan protract protrude proud provable proved proven provided provider providing province proving provoke provoking provolone prowess prowler prowling proximity proxy prozac prude prudishly prune pruning pry psychic public publisher pucker pueblo pug pull pulmonary pulp pulsate pulse pulverize puma pumice pummel punch punctual punctuate punctured pungent punisher punk pupil puppet puppy purchase pureblood purebred purely pureness purgatory purge purging purifier purify purist puritan purity purple purplish purposely purr purse pursuable pursuant pursuit purveyor pushcart pushchair pusher pushiness pushing pushover pushpin pushup pushy putdown putt puzzle puzzling pyramid pyromania python quack quadrant quail quaintly quake quaking qualified qualifier qualify quality qualm quantum quarrel quarry quartered quarterly quarters quartet quench query quicken quickly quickness quicksand quickstep quiet quill quilt quintet quintuple quirk quit quiver quizzical quotable quotation quote rabid race racing racism rack racoon radar radial radiance radiantly radiated radiation radiator radio radish raffle raft rage ragged raging ragweed raider railcar railing railroad railway raisin rake raking rally ramble rambling ramp ramrod ranch rancidity random ranged ranger ranging ranked ranking ransack ranting rants rare rarity rascal rash rasping ravage raven ravine raving ravioli ravishing reabsorb reach reacquire reaction reactive reactor reaffirm ream reanalyze reappear reapply reappoint reapprove rearrange rearview reason reassign reassure reattach reawake rebalance rebate rebel rebirth reboot reborn rebound rebuff rebuild rebuilt reburial rebuttal recall recant recapture recast recede recent recess recharger recipient recital recite reckless reclaim recliner reclining recluse reclusive recognize recoil recollect recolor reconcile reconfirm reconvene recopy record recount recoup recovery recreate rectal rectangle rectified rectify recycled recycler recycling reemerge reenact reenter reentry reexamine referable referee reference refill refinance refined refinery refining refinish reflected reflector reflex reflux refocus refold reforest reformat reformed reformer reformist refract refrain refreeze refresh refried refueling refund refurbish refurnish refusal refuse refusing refutable refute regain regalia regally reggae regime region register registrar registry regress regretful regroup regular regulate regulator rehab reheat rehire rehydrate reimburse reissue reiterate rejoice rejoicing rejoin rekindle relapse relapsing relatable related relation relative relax relay relearn release relenting reliable reliably reliance reliant relic relieve relieving relight relish relive reload relocate relock reluctant rely remake remark remarry rematch remedial remedy remember reminder remindful remission remix remnant remodeler remold remorse remote removable removal removed remover removing rename renderer rendering rendition renegade renewable renewably renewal renewed renounce renovate renovator rentable rental rented renter reoccupy reoccur reopen reorder repackage repacking repaint repair repave repaying repayment repeal repeated repeater repent rephrase replace replay replica reply reporter repose repossess repost repressed reprimand reprint reprise reproach reprocess reproduce reprogram reps reptile reptilian repugnant repulsion repulsive repurpose reputable reputably request require requisite reroute rerun resale resample rescuer reseal research reselect reseller resemble resend resent reset reshape reshoot reshuffle residence residency resident residual residue resigned resilient resistant resisting resize resolute resolved resonant resonate resort resource respect resubmit result resume resupply resurface resurrect retail retainer retaining retake retaliate retention rethink retinal retired retiree retiring retold retool retorted retouch retrace retract retrain retread retreat retrial retrieval retriever retry return retying retype reunion reunite reusable reuse reveal reveler revenge revenue reverb revered reverence reverend reversal reverse reversing reversion revert revisable revise revision revisit revivable revival reviver reviving revocable revoke revolt revolver revolving reward rewash rewind rewire reword rework rewrap rewrite rhyme ribbon ribcage rice riches richly richness rickety ricotta riddance ridden ride riding rifling rift rigging rigid rigor rimless rimmed rind rink rinse rinsing riot ripcord ripeness ripening ripping ripple rippling riptide rise rising risk risotto ritalin ritzy rival riverbank riverbed riverboat riverside riveter riveting roamer roaming roast robbing robe robin robotics robust rockband rocker rocket rockfish rockiness rocking rocklike rockslide rockstar rocky rogue roman romp rope roping roster rosy rotten rotting rotunda roulette rounding roundish roundness roundup roundworm routine routing rover roving royal rubbed rubber rubbing rubble rubdown ruby ruckus rudder rug ruined rule rumble rumbling rummage rumor runaround rundown runner running runny runt runway rupture rural ruse rush rust rut sabbath sabotage sacrament sacred sacrifice sadden saddlebag saddled saddling sadly sadness safari safeguard safehouse safely safeness saffron saga sage sagging saggy said saint sake salad salami salaried salary saline salon saloon salsa salt salutary salute salvage salvaging salvation same sample sampling sanction sanctity sanctuary sandal sandbag sandbank sandbar sandblast sandbox sanded sandfish sanding sandlot sandpaper sandpit sandstone sandstorm sandworm sandy sanitary sanitizer sank santa sapling sappiness sappy sarcasm sarcastic sardine sash sasquatch sassy satchel satiable satin satirical satisfied satisfy saturate saturday sauciness saucy sauna savage savanna saved savings savior savor saxophone say scabbed scabby scalded scalding scale scaling scallion scallop scalping scam scandal scanner scanning scant scapegoat scarce scarcity scarecrow scared scarf scarily scariness scarring scary scavenger scenic schedule schematic scheme scheming schilling schnapps scholar science scientist scion scoff scolding scone scoop scooter scope scorch scorebook scorecard scored scoreless scorer scoring scorn scorpion scotch scoundrel scoured scouring scouting scouts scowling scrabble scraggly scrambled scrambler scrap scratch scrawny screen scribble scribe scribing scrimmage script scroll scrooge scrounger scrubbed scrubber scruffy scrunch scrutiny scuba scuff sculptor sculpture scurvy scuttle secluded secluding seclusion second secrecy secret sectional sector secular securely security sedan sedate sedation sedative sediment seduce seducing segment seismic seizing seldom selected selection selective selector self seltzer semantic semester semicolon semifinal seminar semisoft semisweet senate senator send senior senorita sensation sensitive sensitize sensually sensuous sepia september septic septum sequel sequence sequester series sermon serotonin serpent serrated serve service serving sesame sessions setback setting settle settling setup sevenfold seventeen seventh seventy severity shabby shack shaded shadily shadiness shading shadow shady shaft shakable shakily shakiness shaking shaky shale shallot shallow shame shampoo shamrock shank shanty shape shaping share sharpener sharper sharpie sharply sharpness shawl sheath shed sheep sheet shelf shell shelter shelve shelving sherry shield shifter shifting shiftless shifty shimmer shimmy shindig shine shingle shininess shining shiny ship shirt shivering shock shone shoplift shopper shopping shoptalk shore shortage shortcake shortcut shorten shorter shorthand shortlist shortly shortness shorts shortwave shorty shout shove showbiz showcase showdown shower showgirl showing showman shown showoff showpiece showplace showroom showy shrank shrapnel shredder shredding shrewdly shriek shrill shrimp shrine shrink shrivel shrouded shrubbery shrubs shrug shrunk shucking shudder shuffle shuffling shun shush shut shy siamese siberian sibling siding sierra siesta sift sighing silenced silencer silent silica silicon silk silliness silly silo silt silver similarly simile simmering simple simplify simply sincere sincerity singer singing single singular sinister sinless sinner sinuous sip siren sister sitcom sitter sitting situated situation sixfold sixteen sixth sixties sixtieth sixtyfold sizable sizably size sizing sizzle sizzling skater skating skedaddle skeletal skeleton skeptic sketch skewed skewer skid skied skier skies skiing skilled skillet skillful skimmed skimmer skimming skimpily skincare skinhead skinless skinning skinny skintight skipper skipping skirmish skirt skittle skydiver skylight skyline skype skyrocket skyward slab slacked slacker slacking slackness slacks slain slam slander slang slapping slapstick slashed slashing slate slather slaw sled sleek sleep sleet sleeve slept sliceable sliced slicer slicing slick slider slideshow sliding slighted slighting slightly slimness slimy slinging slingshot slinky slip slit sliver slobbery slogan sloped sloping sloppily sloppy slot slouching slouchy sludge slug slum slurp slush sly small smartly smartness smasher smashing smashup smell smelting smile smilingly smirk smite smith smitten smock smog smoked smokeless smokiness smoking smoky smolder smooth smother smudge smudgy smuggler smuggling smugly smugness snack snagged snaking snap snare snarl snazzy sneak sneer sneeze sneezing snide sniff snippet snipping snitch snooper snooze snore snoring snorkel snort snout snowbird snowboard snowbound snowcap snowdrift snowdrop snowfall snowfield snowflake snowiness snowless snowman snowplow snowshoe snowstorm snowsuit snowy snub snuff snuggle snugly snugness speak spearfish spearhead spearman spearmint species specimen specked speckled specks spectacle spectator spectrum speculate speech speed spellbind speller spelling spendable spender spending spent spew sphere spherical sphinx spider spied spiffy spill spilt spinach spinal spindle spinner spinning spinout spinster spiny spiral spirited spiritism spirits spiritual splashed splashing splashy splatter spleen splendid splendor splice splicing splinter splotchy splurge spoilage spoiled spoiler spoiling spoils spoken spokesman sponge spongy sponsor spoof spookily spooky spool spoon spore sporting sports sporty spotless spotlight spotted spotter spotting spotty spousal spouse spout sprain sprang sprawl spray spree sprig spring sprinkled sprinkler sprint sprite sprout spruce sprung spry spud spur sputter spyglass squabble squad squall squander squash squatted squatter squatting squeak squealer squealing squeamish squeegee squeeze squeezing squid squiggle squiggly squint squire squirt squishier squishy stability stabilize stable stack stadium staff stage staging stagnant stagnate stainable stained staining stainless stalemate staleness stalling stallion stamina stammer stamp stand stank staple stapling starboard starch stardom stardust starfish stargazer staring stark starless starlet starlight starlit starring starry starship starter starting startle startling startup starved starving stash state static statistic statue stature status statute statutory staunch stays steadfast steadier steadily steadying steam steed steep steerable steering steersman stegosaur stellar stem stench stencil step stereo sterile sterility sterilize sterling sternness sternum stew stick stiffen stiffly stiffness stifle stifling stillness stilt stimulant stimulate stimuli stimulus stinger stingily stinging stingray stingy stinking stinky stipend stipulate stir stitch stock stoic stoke stole stomp stonewall stoneware stonework stoning stony stood stooge stool stoop stoplight stoppable stoppage stopped stopper stopping stopwatch storable storage storeroom storewide storm stout stove stowaway stowing straddle straggler strained strainer straining strangely stranger strangle strategic strategy stratus straw stray streak stream street strength strenuous strep stress stretch strewn stricken strict stride strife strike striking strive striving strobe strode stroller strongbox strongly strongman struck structure strudel struggle strum strung strut stubbed stubble stubbly stubborn stucco stuck student studied studio study stuffed stuffing stuffy stumble stumbling stump stung stunned stunner stunning stunt stupor sturdily sturdy styling stylishly stylist stylized stylus suave subarctic subatomic subdivide subdued subduing subfloor subgroup subheader subject sublease sublet sublevel sublime submarine submerge submersed submitter subpanel subpar subplot subprime subscribe subscript subsector subside subsiding subsidize subsidy subsoil subsonic substance subsystem subtext subtitle subtly subtotal subtract subtype suburb subway subwoofer subzero succulent such suction sudden sudoku suds sufferer suffering suffice suffix suffocate suffrage sugar suggest suing suitable suitably suitcase suitor sulfate sulfide sulfite sulfur sulk sullen sulphate sulphuric sultry superbowl superglue superhero superior superjet superman supermom supernova supervise supper supplier supply support supremacy supreme surcharge surely sureness surface surfacing surfboard surfer surgery surgical surging surname surpass surplus surprise surreal surrender surrogate surround survey survival survive surviving survivor sushi suspect suspend suspense sustained sustainer swab swaddling swagger swampland swan swapping swarm sway swear sweat sweep swell swept swerve swifter swiftly swiftness swimmable swimmer swimming swimsuit swimwear swinger swinging swipe swirl switch swivel swizzle swooned swoop swoosh swore sworn swung sycamore sympathy symphonic symphony symptom synapse syndrome synergy synopses synopsis synthesis synthetic syrup system t-shirt tabasco tabby tableful tables tablet tableware tabloid tackiness tacking tackle tackling tacky taco tactful tactical tactics tactile tactless tadpole taekwondo tag tainted take taking talcum talisman tall talon tamale tameness tamer tamper tank tanned tannery tanning tantrum tapeless tapered tapering tapestry tapioca tapping taps tarantula target tarmac tarnish tarot tartar tartly tartness task tassel taste tastiness tasting tasty tattered tattle tattling tattoo taunt tavern thank that thaw theater theatrics thee theft theme theology theorize thermal thermos thesaurus these thesis thespian thicken thicket thickness thieving thievish thigh thimble thing think thinly thinner thinness thinning thirstily thirsting thirsty thirteen thirty thong thorn those thousand thrash thread threaten threefold thrift thrill thrive thriving throat throbbing throng throttle throwaway throwback thrower throwing thud thumb thumping thursday thus thwarting thyself tiara tibia tidal tidbit tidiness tidings tidy tiger tighten tightly tightness tightrope tightwad tigress tile tiling till tilt timid timing timothy tinderbox tinfoil tingle tingling tingly tinker tinkling tinsel tinsmith tint tinwork tiny tipoff tipped tipper tipping tiptoeing tiptop tiring tissue trace tracing track traction tractor trade trading tradition traffic tragedy trailing trailside train traitor trance tranquil transfer transform translate transpire transport transpose trapdoor trapeze trapezoid trapped trapper trapping traps trash travel traverse travesty tray treachery treading treadmill treason treat treble tree trekker tremble trembling tremor trench trend trespass triage trial triangle tribesman tribunal tribune tributary tribute triceps trickery trickily tricking trickle trickster tricky tricolor tricycle trident tried trifle trifocals trillion trilogy trimester trimmer trimming trimness trinity trio tripod tripping triumph trivial trodden trolling trombone trophy tropical tropics trouble troubling trough trousers trout trowel truce truck truffle trump trunks trustable trustee trustful trusting trustless truth try tubby tubeless tubular tucking tuesday tug tuition tulip tumble tumbling tummy turban turbine turbofan turbojet turbulent turf turkey turmoil turret turtle tusk tutor tutu tux tweak tweed tweet tweezers twelve twentieth twenty twerp twice twiddle twiddling twig twilight twine twins twirl twistable twisted twister twisting twisty twitch twitter tycoon tying tyke udder ultimate ultimatum ultra umbilical umbrella umpire unabashed unable unadorned unadvised unafraid unaired unaligned unaltered unarmored unashamed unaudited unawake unaware unbaked unbalance unbeaten unbend unbent unbiased unbitten unblended unblessed unblock unbolted unbounded unboxed unbraided unbridle unbroken unbuckled unbundle unburned unbutton uncanny uncapped uncaring uncertain unchain unchanged uncharted uncheck uncivil unclad unclaimed unclamped unclasp uncle unclip uncloak unclog unclothed uncoated uncoiled uncolored uncombed uncommon uncooked uncork uncorrupt uncounted uncouple uncouth uncover uncross uncrown uncrushed uncured uncurious uncurled uncut undamaged undated undaunted undead undecided undefined underage underarm undercoat undercook undercut underdog underdone underfed underfeed underfoot undergo undergrad underhand underline underling undermine undermost underpaid underpass underpay underrate undertake undertone undertook undertow underuse underwear underwent underwire undesired undiluted undivided undocked undoing undone undrafted undress undrilled undusted undying unearned unearth unease uneasily uneasy uneatable uneaten unedited unelected unending unengaged unenvied unequal unethical uneven unexpired unexposed unfailing unfair unfasten unfazed unfeeling unfiled unfilled unfitted unfitting unfixable unfixed unflawed unfocused unfold unfounded unframed unfreeze unfrosted unfrozen unfunded unglazed ungloved unglue ungodly ungraded ungreased unguarded unguided unhappily unhappy unharmed unhealthy unheard unhearing unheated unhelpful unhidden unhinge unhitched unholy unhook unicorn unicycle unified unifier uniformed uniformly unify unimpeded uninjured uninstall uninsured uninvited union uniquely unisexual unison unissued unit universal universe unjustly unkempt unkind unknotted unknowing unknown unlaced unlatch unlawful unleaded unlearned unleash unless unleveled unlighted unlikable unlimited unlined unlinked unlisted unlit unlivable unloaded unloader unlocked unlocking unlovable unloved unlovely unloving unluckily unlucky unmade unmanaged unmanned unmapped unmarked unmasked unmasking unmatched unmindful unmixable unmixed unmolded unmoral unmovable unmoved unmoving unnamable unnamed unnatural unneeded unnerve unnerving unnoticed unopened unopposed unpack unpadded unpaid unpainted unpaired unpaved unpeeled unpicked unpiloted unpinned unplanned unplanted unpleased unpledged unplowed unplug unpopular unproven unquote unranked unrated unraveled unreached unread unreal unreeling unrefined unrelated unrented unrest unretired unrevised unrigged unripe unrivaled unroasted unrobed unroll unruffled unruly unrushed unsaddle unsafe unsaid unsalted unsaved unsavory unscathed unscented unscrew unsealed unseated unsecured unseeing unseemly unseen unselect unselfish unsent unsettled unshackle unshaken unshaved unshaven unsheathe unshipped unsightly unsigned unskilled unsliced unsmooth unsnap unsocial unsoiled unsold unsolved unsorted unspoiled unspoken unstable unstaffed unstamped unsteady unsterile unstirred unstitch unstopped unstuck unstuffed unstylish unsubtle unsubtly unsuited unsure unsworn untagged untainted untaken untamed untangled untapped untaxed unthawed unthread untidy untie until untimed untimely untitled untoasted untold untouched untracked untrained untreated untried untrimmed untrue untruth unturned untwist untying unusable unused unusual unvalued unvaried unvarying unveiled unveiling unvented unviable unvisited unvocal unwanted unwarlike unwary unwashed unwatched unweave unwed unwelcome unwell unwieldy unwilling unwind unwired unwitting unwomanly unworldly unworn unworried unworthy unwound unwoven unwrapped unwritten unzip upbeat upchuck upcoming upcountry update upfront upgrade upheaval upheld uphill uphold uplifted uplifting upload upon upper upright uprising upriver uproar uproot upscale upside upstage upstairs upstart upstate upstream upstroke upswing uptake uptight uptown upturned upward upwind uranium urban urchin urethane urgency urgent urging urologist urology usable usage useable used uselessly user usher usual utensil utility utilize utmost utopia utter vacancy vacant vacate vacation vagabond vagrancy vagrantly vaguely vagueness valiant valid valium valley valuables value vanilla vanish vanity vanquish vantage vaporizer variable variably varied variety various varmint varnish varsity varying vascular vaseline vastly vastness veal vegan veggie vehicular velcro velocity velvet vendetta vending vendor veneering vengeful venomous ventricle venture venue venus verbalize verbally verbose verdict verify verse version versus vertebrae vertical vertigo very vessel vest veteran veto vexingly viability viable vibes vice vicinity victory video viewable viewer viewing viewless viewpoint vigorous village villain vindicate vineyard vintage violate violation violator violet violin viper viral virtual virtuous virus visa viscosity viscous viselike visible visibly vision visiting visitor visor vista vitality vitalize vitally vitamins vivacious vividly vividness vixen vocalist vocalize vocally vocation voice voicing void volatile volley voltage volumes voter voting voucher vowed vowel voyage wackiness wad wafer waffle waged wager wages waggle wagon wake waking walk walmart walnut walrus waltz wand wannabe wanted wanting wasabi washable washbasin washboard washbowl washcloth washday washed washer washhouse washing washout washroom washstand washtub wasp wasting watch water waviness waving wavy whacking whacky wham wharf wheat whenever whiff whimsical whinny whiny whisking whoever whole whomever whoopee whooping whoops why wick widely widen widget widow width wieldable wielder wife wifi wikipedia wildcard wildcat wilder wildfire wildfowl wildland wildlife wildly wildness willed willfully willing willow willpower wilt wimp wince wincing wind wing winking winner winnings winter wipe wired wireless wiring wiry wisdom wise wish wisplike wispy wistful wizard wobble wobbling wobbly wok wolf wolverine womanhood womankind womanless womanlike womanly womb woof wooing wool woozy word work worried worrier worrisome worry worsening worshiper worst wound woven wow wrangle wrath wreath wreckage wrecker wrecking wrench wriggle wriggly wrinkle wrinkly wrist writing written wrongdoer wronged wrongful wrongly wrongness wrought xbox xerox yahoo yam yanking yapping yard yarn yeah yearbook yearling yearly yearning yeast yelling yelp yen yesterday yiddish yield yin yippee yo-yo yodel yoga yogurt yonder yoyo yummy zap zealous zebra zen zeppelin zero zestfully zesty zigzagged zipfile zipping zippy zips zit zodiac zombie zone zoning zookeeper zoologist zoology zoom onionshare-2.6.3/cli/onionshare_cli/settings.py000066400000000000000000000173621475545702100216670ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import json import os import locale class Settings(object): """ This class stores all of the settings for OnionShare, specifically for how to connect to Tor. If it can't find the settings file, it uses the default, which is to attempt to connect automatically using default Tor Browser settings. """ def __init__(self, common, config=False): self.common = common self.common.log("Settings", "__init__") # If a readable config file was provided, use that instead if config: if os.path.isfile(config): self.filename = config else: self.common.log( "Settings", "__init__", "Supplied config does not exist or is unreadable. Falling back to default location", ) self.filename = self.build_filename() else: # Default config self.filename = self.build_filename() # Dictionary of available languages in this version of OnionShare, # mapped to the language name, in that language self.available_locales = { "af": "Afrikaans", # Afrikaans "sq": "Shqip", # Albanian "ar": "العربية", # Arabic "be": "Беларуская", # Belarusian "bn": "বাংলা", # Bengali "bg": "Български", #Bulgarian "ca": "Català", # Catalan "zh_Hant": "正體中文 (繁體)", # Traditional Chinese "zh_Hans": "中文 (简体)", # Simplified Chinese "hr": "Hrvatski", # Croatian "cs": "čeština", # Czech "da": "Dansk", # Danish # "nl": "Nederlands", # Dutch "en": "English", # English "fi": "Suomi", # Finnish "fr": "Français", # French "gl": "Galego", # Galician "de": "Deutsch", # German "el": "Ελληνικά", # Greek "is": "Íslenska", # Icelandic # "id": "Bahasa Indonesia", # Indonesian "ga": "Gaeilge", # Irish "it": "Italiano", # Italian "ja": "日本語", # Japanese "km": "ខ្មែរ", # Khmer(Central) # "ckb": "Soranî", # Kurdish (Central) "lt": "Lietuvių Kalba", # Lithuanian "nb_NO": "Norsk Bokmål", # Norwegian Bokmål "fa": "فارسی", # Persian "pl": "Polski", # Polish "pt_BR": "Português (Brasil)", # Portuguese Brazil "pt_PT": "Português (Portugal)", # Portuguese Portugal # "ro": "Română", # Romanian "ru": "Русский", # Russian "sn": "chiShona", # Shona # "sr_Latn": "Srpska (latinica)", # Serbian (latin) "sk": "Slovenčina", # Slovak "es": "Español", # Spanish "sw": "Kiswahili", # Swahili "sv": "Svenska", # Swedish "ta": "Tamil", # Tamil # "te": "తెలుగు", # Telugu "tr": "Türkçe", # Turkish "uk": "Українська", # Ukrainian "vi": "Tiếng Việt", # Vietnamese } # These are the default settings. They will get overwritten when loading from disk self.default_settings = { "version": self.common.version, "connection_type": "bundled", "control_port_address": "127.0.0.1", "control_port_port": 9051, "socks_address": "127.0.0.1", "socks_port": 9050, "socket_file_path": "/var/run/tor/control", "auth_type": "no_auth", "auth_password": "", "auto_connect": False, "use_autoupdate": True, "autoupdate_timestamp": None, "bridges_enabled": False, "bridges_type": "built-in", # "built-in", "moat", or "custom" "bridges_builtin_pt": "obfs4", # "obfs4", "meek-azure", or "snowflake" "bridges_moat": "", "bridges_custom": "", "bridges_builtin": {}, "persistent_tabs": [], "locale": None, # this gets defined in fill_in_defaults() "theme": 0, } self._settings = {} self.fill_in_defaults() def fill_in_defaults(self): """ If there are any missing settings from self._settings, replace them with their default values. """ for key in self.default_settings: if key not in self._settings: self._settings[key] = self.default_settings[key] # Choose the default locale based on the OS preference, and fall-back to English if self._settings["locale"] is None: language_code, encoding = locale.getdefaultlocale() # Default to English if not language_code: language_code = "en_US" if language_code == "pt_PT" and language_code == "pt_BR": # Portuguese locales include country code default_locale = language_code else: # All other locales cut off the country code default_locale = language_code[:2] if default_locale not in self.available_locales: default_locale = "en" self._settings["locale"] = default_locale def build_filename(self): """ Returns the path of the settings file. """ return os.path.join(self.common.build_data_dir(), "onionshare.json") def load(self): """ Load the settings from file. """ self.common.log("Settings", "load") # If the settings file exists, load it if os.path.exists(self.filename): try: self.common.log("Settings", "load", f"Trying to load {self.filename}") with open(self.filename, "r") as f: self._settings = json.load(f) self.fill_in_defaults() except Exception: pass # Make sure data_dir exists try: os.makedirs(self.get("data_dir"), exist_ok=True) except Exception: pass def save(self): """ Save settings to file. """ self.common.log("Settings", "save") open(self.filename, "w").write(json.dumps(self._settings, indent=2)) self.common.log("Settings", "save", f"Settings saved in {self.filename}") def get(self, key): return self._settings[key] def set(self, key, val): # If typecasting int values fails, fallback to default values if key == "control_port_port" or key == "socks_port": try: val = int(val) except Exception: if key == "control_port_port": val = self.default_settings["control_port_port"] elif key == "socks_port": val = self.default_settings["socks_port"] self._settings[key] = val onionshare-2.6.3/cli/onionshare_cli/web/000077500000000000000000000000001475545702100202215ustar00rootroot00000000000000onionshare-2.6.3/cli/onionshare_cli/web/__init__.py000066400000000000000000000014011475545702100223260ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from .web import Web onionshare-2.6.3/cli/onionshare_cli/web/chat_mode.py000066400000000000000000000206041475545702100225200ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import unicodedata from flask import request, render_template, make_response, jsonify, session from flask_socketio import emit, ConnectionRefusedError class ChatModeWeb: """ All of the web logic for chat mode """ def __init__(self, common, web): self.common = common self.common.log("ChatModeWeb", "__init__") self.web = web # This tracks users in the server self.connected_users = [] # This tracks the history id self.cur_history_id = 0 # Whether or not we can send REQUEST_INDIVIDUAL_FILE_STARTED # and maybe other events when requests come in to this mode # Chat mode has no concept of individual file requests that # turn into history widgets in the GUI, so set it to False self.supports_file_requests = False self.define_routes() def remove_unallowed_characters(self, text): """ Sanitize username to remove unwanted characters. Allowed characters right now are: - all ASCII numbers - all ASCII letters - dash, underscore and single space """ def allowed_character(ch): allowed_unicode_categories = [ 'L', # All letters 'N', # All numbers ] allowed_special_characters = [ '-', # dash '_', # underscore ' ', # single space ] return ( unicodedata.category(ch)[0] in allowed_unicode_categories and ord(ch) < 128 ) or ch in allowed_special_characters return "".join( ch for ch in text if allowed_character(ch) ) def validate_username(self, username): try: username = self.remove_unallowed_characters(username.strip()) return ( username and username not in self.connected_users and len(username) < 128 ) except Exception as e: self.common.log("ChatModeWeb", "validate_username", e) return False def define_routes(self): """ The web app routes for chatting """ @self.web.app.route("/", methods=["GET"], provide_automatic_options=False) def index(): history_id = self.cur_history_id self.cur_history_id += 1 session["name"] = ( session.get("name") if session.get("name") else self.common.build_username() ) self.web.add_request( request.path, {"id": history_id, "status_code": 200}, ) self.web.add_request(self.web.REQUEST_LOAD, request.path) return render_template( "chat.html", static_url_path=self.web.static_url_path, username=session.get("name"), title=self.web.settings.get("general", "title"), ) @self.web.app.route( "/update-session-username", methods=["POST"], provide_automatic_options=False, ) def update_session_username(): history_id = self.cur_history_id data = request.get_json() username = data.get("username", session.get("name")).strip() if self.validate_username(username): session["name"] = username self.web.add_request( request.path, {"id": history_id, "status_code": 200}, ) self.web.add_request(self.web.REQUEST_LOAD, request.path) r = make_response( jsonify( username=session.get("name"), success=True, ) ) else: self.web.add_request( request.path, {"id": history_id, "status_code": 403}, ) r = make_response( jsonify( username=session.get("name"), success=False, ) ) return r @self.web.socketio.on("connect", namespace="/chat") def server_connect(): """Sent by clients when they enter a room. A status message is broadcast to all people in the room.""" if self.validate_username(session.get("name")): self.connected_users.append(session.get("name")) # Store the session id for the user session["socketio_session_id"] = request.sid emit( "status", { "username": session.get("name"), "msg": "{} has joined.".format(session.get("name")), "connected_users": self.connected_users, "user": session.get("name"), }, broadcast=True, ) else: raise ConnectionRefusedError('Invalid session') @self.web.socketio.on("text", namespace="/chat") def text(message): """Sent by a client when the user entered a new message. The message is sent to all people in the server.""" emit( "chat_message", {"username": session.get("name"), "msg": message["msg"]}, broadcast=True, ) @self.web.socketio.on("update_username", namespace="/chat") def update_username(message): """Sent by a client when the user updates their username. The message is sent to all people in the server.""" current_name = session.get("name") new_name = message.get("username", "").strip() if self.validate_username(new_name): session["name"] = new_name self.connected_users[self.connected_users.index(current_name)] = ( session.get("name") ) emit( "status", { "msg": "{} has updated their username to: {}".format( current_name, session.get("name") ), "connected_users": self.connected_users, "old_name": current_name, "new_name": session.get("name"), }, broadcast=True, ) else: emit( "status", {"msg": "Failed to update username."}, ) @self.web.socketio.on("disconnect", namespace="/chat") def disconnect(): """Sent by clients when they disconnect. A status message is broadcast to all people in the server.""" user_already_disconnected = False if session.get("name") in self.connected_users: self.connected_users.remove(session.get("name")) else: user_already_disconnected = True # Forcefully disconnect the user self.web.socketio.server.disconnect( sid=session.get("socketio_session_id"), namespace="/chat" ) if not user_already_disconnected: emit( "status", { "msg": "{} has left the room.".format(session.get("name")), "connected_users": self.connected_users, }, broadcast=True, ) onionshare-2.6.3/cli/onionshare_cli/web/receive_mode.py000066400000000000000000000562741475545702100232370ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import tempfile import json import requests from datetime import datetime from flask import Request, request, render_template, make_response, flash, redirect from werkzeug.utils import secure_filename # Receive mode uses a special flask requests object, ReceiveModeRequest, in # order to keep track of upload progress. Here's what happens when someone # uploads files: # - new ReceiveModeRequest object is created # - ReceiveModeRequest.__init__ # - creates a directory based on the timestamp # - creates empty self.progress = dict, which will map uploaded files to their upload progress # - ReceiveModeRequest._get_file_stream # - called for each file that gets upload # - the first time, send REQUEST_STARTED to GUI, and append to self.web.receive_mode.uploads_in_progress # - updates self.progress[self.filename] for the current file # - uses custom ReceiveModeFile to save file to disk # - ReceiveModeRequest.file_write_func called on each write # - Display progress in CLI, and send REQUEST_PROGRESS to GUI # - ReceiveModeRequest.file_close_func called when each file closes # - self.progress[filename]["complete"] = True # - ReceiveModeRequest.close # - send either REQUEST_UPLOAD_CANCELED or REQUEST_UPLOAD_FINISHED to GUI # - remove from self.web.receive_mode.uploads_in_progress class ReceiveModeWeb: """ All of the web logic for receive mode """ def __init__(self, common, web): self.common = common self.common.log("ReceiveModeWeb", "__init__") self.web = web self.can_upload = True self.uploads_in_progress = [] # This tracks the history id self.cur_history_id = 0 # Whether or not we can send REQUEST_INDIVIDUAL_FILE_STARTED # and maybe other events when requests come in to this mode self.supports_file_requests = True self.define_routes() def define_routes(self): """ The web app routes for receiving files """ @self.web.app.route("/", methods=["GET"], provide_automatic_options=False) def index(): history_id = self.cur_history_id self.cur_history_id += 1 self.web.add_request( self.web.REQUEST_INDIVIDUAL_FILE_STARTED, request.path, {"id": history_id, "status_code": 200}, ) self.web.add_request(self.web.REQUEST_LOAD, request.path) return render_template( "receive.html", static_url_path=self.web.static_url_path, disable_text=self.web.settings.get("receive", "disable_text"), disable_files=self.web.settings.get("receive", "disable_files"), title=self.web.settings.get("general", "title") ) @self.web.app.route("/upload", methods=["POST"], provide_automatic_options=False) def upload(ajax=False): """ Handle the upload files POST request, though at this point, the files have already been uploaded and saved to their correct locations. """ message_received = request.includes_message files_received = 0 if not self.web.settings.get("receive", "disable_files"): files = request.files.getlist("file[]") filenames = [] for f in files: if f.filename != "": filename = secure_filename(f.filename) filenames.append(filename) local_path = os.path.join(request.receive_mode_dir, filename) basename = os.path.basename(local_path) # Tell the GUI the receive mode directory for this file self.web.add_request( self.web.REQUEST_UPLOAD_SET_DIR, request.path, { "id": request.history_id, "filename": basename, "dir": request.receive_mode_dir, }, ) self.common.log( "ReceiveModeWeb", "define_routes", f"/upload, uploaded {f.filename}, saving to {local_path}", ) print(f"Received: {local_path}") files_received = len(filenames) # Send webhook if configured if ( self.web.settings.get("receive", "webhook_url") is not None and not request.upload_error and (message_received or files_received) ): msg = "" if files_received > 0: if files_received == 1: msg += "1 file" else: msg += f"{files_received} files" if message_received: if msg == "": msg = "A text message" else: msg += " and a text message" self.send_webhook_notification(f"{msg} submitted to OnionShare") if request.upload_error: self.common.log( "ReceiveModeWeb", "define_routes", "/upload, there was an upload error", ) self.web.add_request( self.web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE, request.path, {"receive_mode_dir": request.receive_mode_dir}, ) print( f"Could not create OnionShare data folder: {request.receive_mode_dir}" ) msg = "Error uploading, please inform the OnionShare user" if ajax: return json.dumps({"error_flashes": [msg]}) else: flash(msg, "error") return redirect("/") if ajax: info_flashes = [] if files_received > 0: files_msg = "" for filename in filenames: files_msg += f"{filename}, " files_msg = files_msg.rstrip(", ") if message_received: if files_received > 0: msg = f"Message submitted, uploaded {files_msg}" else: msg = "Message submitted" else: if files_received > 0: msg = f"Uploaded {files_msg}" else: if not self.web.settings.get("receive", "disable_text"): msg = "Nothing submitted or message was too long (> 524288 characters)" else: msg = "Nothing submitted" if ajax: info_flashes.append(msg) else: flash(msg, "info") if self.can_upload: if ajax: return json.dumps({"info_flashes": info_flashes}) else: return redirect("/") else: if ajax: return json.dumps( { "new_body": render_template( "thankyou.html", static_url_path=self.web.static_url_path, title=self.web.settings.get("general", "title"), ) } ) else: # It was the last upload and the timer ran out return make_response( render_template("thankyou.html"), static_url_path=self.web.static_url_path, title=self.web.settings.get("general", "title"), ) @self.web.app.route("/upload-ajax", methods=["POST"], provide_automatic_options=False) def upload_ajax_public(): if not self.can_upload: return self.web.error403() return upload(ajax=True) def send_webhook_notification(self, data): self.common.log("ReceiveModeWeb", "send_webhook_notification", data) try: requests.post( self.web.settings.get("receive", "webhook_url"), data=data, timeout=5, proxies=self.web.proxies, ) except Exception as e: print(f"Webhook notification failed: {e}") class ReceiveModeWSGIMiddleware(object): """ Custom WSGI middleware in order to attach the Web object to environ, so ReceiveModeRequest can access it. """ def __init__(self, app, web): self.app = app self.web = web def __call__(self, environ, start_response): environ["web"] = self.web environ["stop_q"] = self.web.stop_q return self.app(environ, start_response) class ReceiveModeFile(object): """ A custom file object that tells ReceiveModeRequest every time data gets written to it, in order to track the progress of uploads. It starts out with a .part file extension, and when it's complete it removes that extension. """ def __init__(self, request, filename, write_func, close_func): self.onionshare_request = request self.onionshare_filename = filename self.onionshare_write_func = write_func self.onionshare_close_func = close_func self.filename = os.path.join(self.onionshare_request.receive_mode_dir, filename) self.filename_in_progress = f"{self.filename}.part" # Open the file self.upload_error = False try: self.f = open(self.filename_in_progress, "wb+") except Exception: # This will only happen if someone is messing with the data dir while # OnionShare is running, but if it does make sure to throw an error self.upload_error = True self.f = tempfile.TemporaryFile("wb+") # Make all the file-like methods and attributes actually access the # TemporaryFile, except for write attrs = [ "closed", "detach", "fileno", "flush", "isatty", "mode", "name", "peek", "raw", "read", "read1", "readable", "readinto", "readinto1", "readline", "readlines", "seek", "seekable", "tell", "truncate", "writable", "writelines", ] for attr in attrs: setattr(self, attr, getattr(self.f, attr)) def write(self, b): """ Custom write method that calls out to onionshare_write_func """ if self.upload_error or (not self.onionshare_request.stop_q.empty()): self.close() self.onionshare_request.close() return try: bytes_written = self.f.write(b) self.onionshare_write_func(self.onionshare_filename, bytes_written) except Exception: self.upload_error = True def close(self): """ Custom close method that calls out to onionshare_close_func """ try: self.f.close() if not self.upload_error: # Rename the in progress file to the final filename os.rename(self.filename_in_progress, self.filename) except Exception: self.upload_error = True self.onionshare_close_func(self.onionshare_filename, self.upload_error) class ReceiveModeRequest(Request): """ A custom flask Request object that keeps track of how much data has been uploaded for each file, for receive mode. """ def __init__(self, environ, populate_request=True, shallow=False): super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow) self.web = environ["web"] self.stop_q = environ["stop_q"] self.filename = None # Prevent running the close() method more than once self.closed = False # Is this a valid upload request? self.upload_request = False if self.method == "POST": if self.path == "/upload" or self.path == "/upload-ajax": self.upload_request = True if self.upload_request: self.web.common.log("ReceiveModeRequest", "__init__") # No errors yet self.upload_error = False # Figure out what files should be saved now = datetime.now() date_dir = now.strftime("%Y-%m-%d") time_dir = now.strftime("%H%M%S%f") self.receive_mode_dir = os.path.join( self.web.settings.get("receive", "data_dir"), date_dir, time_dir ) # Create that directory, which shouldn't exist yet try: os.makedirs(self.receive_mode_dir, 0o700, exist_ok=False) except OSError: # If this directory already exists, maybe someone else is uploading files at # the same second, so use a different name in that case if os.path.exists(self.receive_mode_dir): # Keep going until we find a directory name that's available i = 1 while True: new_receive_mode_dir = f"{self.receive_mode_dir}-{i}" try: os.makedirs(new_receive_mode_dir, 0o700, exist_ok=False) self.receive_mode_dir = new_receive_mode_dir break except OSError: pass i += 1 # Failsafe if i == 100: self.web.common.log( "ReceiveModeRequest", "__init__", "Error finding available receive mode directory", ) self.upload_error = True break except PermissionError: self.web.add_request( self.web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE, request.path, {"receive_mode_dir": self.receive_mode_dir}, ) print( f"Could not create OnionShare data folder: {self.receive_mode_dir}" ) self.web.common.log( "ReceiveModeRequest", "__init__", "Permission denied creating receive mode directory", ) self.upload_error = True # Figure out the message filename, in case there is a message self.message_filename = f"{self.receive_mode_dir}-message.txt" # If there's an error so far, finish early if self.upload_error: return # A dictionary that maps filenames to the bytes uploaded so far self.progress = {} # Prevent new uploads if we've said so (timer expired) if self.web.receive_mode.can_upload: # Create an history_id, attach it to the request self.history_id = self.web.receive_mode.cur_history_id self.web.receive_mode.cur_history_id += 1 # Figure out the content length try: self.content_length = int(self.headers["Content-Length"]) except Exception: self.content_length = 0 date_str = datetime.now().strftime("%b %d, %I:%M%p") size_str = self.web.common.human_readable_filesize(self.content_length) print(f"{date_str}: Upload of total size {size_str} is starting") # Don't tell the GUI that a request has started until we start receiving files self.told_gui_about_request = False self.previous_file = None # Is there a text message? self.includes_message = False if not self.web.settings.get("receive", "disable_text"): text_message = self.form.get("text") if text_message and len(text_message) <= 524288: if text_message.strip() != "": self.includes_message = True with open(self.message_filename, "w") as f: f.write(text_message) self.web.common.log( "ReceiveModeRequest", "__init__", f"saved message to {self.message_filename}", ) print(f"Received: {self.message_filename}") # Tell the GUI about the message self.tell_gui_request_started() self.web.common.log( "ReceiveModeRequest", "__init__", "sending REQUEST_UPLOAD_INCLUDES_MESSAGE to GUI", ) self.web.add_request( self.web.REQUEST_UPLOAD_INCLUDES_MESSAGE, self.path, { "id": self.history_id, "filename": self.message_filename, }, ) def tell_gui_request_started(self): # Tell the GUI about the request if not self.told_gui_about_request: self.web.common.log( "ReceiveModeRequest", "tell_gui_request_started", "sending REQUEST_STARTED to GUI", ) self.web.add_request( self.web.REQUEST_STARTED, self.path, { "id": self.history_id, "content_length": self.content_length, }, ) self.web.receive_mode.uploads_in_progress.append(self.history_id) self.told_gui_about_request = True def _get_file_stream( self, total_content_length, content_type, filename=None, content_length=None ): """ This gets called for each file that gets uploaded, and returns an file-like writable stream. """ if self.upload_request: self.tell_gui_request_started() self.filename = secure_filename(filename) self.progress[self.filename] = {"uploaded_bytes": 0, "complete": False} f = ReceiveModeFile( self, self.filename, self.file_write_func, self.file_close_func ) if f.upload_error: self.web.common.log( "ReceiveModeRequest", "_get_file_stream", "Error creating file" ) self.upload_error = True return f def close(self): """ Closing the request. """ super(ReceiveModeRequest, self).close() # Prevent calling this method more than once per request if self.closed: return self.closed = True if self.upload_request: self.web.common.log("ReceiveModeRequest", "close") if self.told_gui_about_request: history_id = self.history_id if not self.web.stop_q.empty() or ( self.filename in self.progress and not self.progress[self.filename]["complete"] ): # Inform the GUI that the upload has canceled self.web.common.log( "ReceiveModeRequest", "close", "sending REQUEST_UPLOAD_CANCELED to GUI", ) self.web.add_request( self.web.REQUEST_UPLOAD_CANCELED, self.path, {"id": history_id}, ) else: # Inform the GUI that the upload has finished self.web.common.log( "ReceiveModeRequest", "close", "sending REQUEST_UPLOAD_FINISHED to GUI", ) self.web.add_request( self.web.REQUEST_UPLOAD_FINISHED, self.path, {"id": history_id}, ) self.web.receive_mode.uploads_in_progress.remove(history_id) # If no files were written to self.receive_mode_dir, delete it try: if len(os.listdir(self.receive_mode_dir)) == 0: os.rmdir(self.receive_mode_dir) except Exception: pass def file_write_func(self, filename, length): """ This function gets called when a specific file is written to. """ if self.closed: return if self.upload_request: self.progress[filename]["uploaded_bytes"] += length if self.previous_file != filename: self.previous_file = filename size_str = self.web.common.human_readable_filesize( self.progress[filename]["uploaded_bytes"] ) if self.web.common.verbose: print(f"=> {size_str} {filename}") else: print(f"\r=> {size_str} {filename} ", end="") # Update the GUI on the upload progress if self.told_gui_about_request: self.web.add_request( self.web.REQUEST_PROGRESS, self.path, {"id": self.history_id, "progress": self.progress}, ) def file_close_func(self, filename, upload_error=False): """ This function gets called when a specific file is closed. """ self.progress[filename]["complete"] = True # If the file tells us there was an upload error, let the request know as well if upload_error: self.upload_error = True onionshare-2.6.3/cli/onionshare_cli/web/send_base_mode.py000066400000000000000000000331761475545702100235340ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import sys import tempfile import mimetypes import gzip from flask import Response, request from unidecode import unidecode from urllib.parse import quote, unquote class SendBaseModeWeb: """ All of the web logic shared between share and website mode (modes where the user sends files) """ def __init__(self, common, web): super(SendBaseModeWeb, self).__init__() self.common = common self.web = web # Information about the file to be shared self.is_zipped = False self.download_filename = None self.download_filesize = None self.zip_writer = None # Create a temporary dir to store gzip files in self.gzip_tmp_dir = tempfile.TemporaryDirectory(dir=self.common.build_tmp_dir()) self.gzip_counter = 0 # If autostop_sharing, only allow one download at a time self.download_in_progress = False # This tracks the history id self.cur_history_id = 0 # Whether or not we can send REQUEST_INDIVIDUAL_FILE_STARTED # and maybe other events when requests come in to this mode self.supports_file_requests = True self.define_routes() self.init() def fix_windows_paths(self, path): """ If on Windows, replace backslashes with slashes """ if self.common.platform == "Windows": return path.replace("\\", "/") return path def set_file_info(self, filenames, processed_size_callback=None): """ Build a data structure that describes the list of files """ # If there's just one folder, replace filenames with a list of files inside that folder if len(filenames) == 1 and os.path.isdir(filenames[0]): filenames = [ os.path.join(filenames[0], x) for x in os.listdir(filenames[0]) ] # Re-initialize self.files = {} # Dictionary mapping file paths to filenames on disk self.root_files = ( {} ) # This is only the root files and dirs, as opposed to all of them self.cur_history_id = 0 self.file_info = {"files": [], "dirs": []} self.gzip_individual_files = {} self.init() # Windows paths use backslashes, but website paths use forward slashes. We have to # make sure we're stripping the correct type of slash if self.common.platform == "Windows": slash = "\\" else: slash = "/" # Build the file list for filename in filenames: basename = os.path.basename(filename.rstrip(slash)) # If it's a filename, add it if os.path.isfile(filename): self.files[self.fix_windows_paths(basename)] = filename self.root_files[self.fix_windows_paths(basename)] = filename # If it's a directory, add it recursively elif os.path.isdir(filename): self.root_files[self.fix_windows_paths(basename)] = filename for root, _, nested_filenames in os.walk(filename): # Normalize the root path. So if the directory name is "/home/user/Documents/some_folder", # and it has a nested folder foobar, the root is "/home/user/Documents/some_folder/foobar". # The normalized_root should be "some_folder/foobar" normalized_root = os.path.join( basename, root[len(filename) :].lstrip(slash) ).rstrip(slash) # Add the dir itself self.files[self.fix_windows_paths(normalized_root)] = root # Add the files in this dir for nested_filename in nested_filenames: self.files[ self.fix_windows_paths( os.path.join(normalized_root, nested_filename) ) ] = os.path.join(root, nested_filename) self.set_file_info_custom(filenames, processed_size_callback) def directory_listing(self, filenames, path="", filesystem_path=None, add_trailing_slash=False): """ Display the front page of a share or index.html-less website, listing the files/directories. """ # Tell the GUI about the directory listing history_id = self.cur_history_id self.cur_history_id += 1 self.web.add_request( self.web.REQUEST_INDIVIDUAL_FILE_STARTED, f"/{path}", {"id": history_id, "method": request.method, "status_code": 200}, ) breadcrumbs = [("☗", "/")] parts = path.split("/") if parts[-1] == "": parts = parts[:-1] for i in range(len(parts)): breadcrumbs.append((parts[i], f"/{'/'.join(parts[0 : i + 1])}")) breadcrumbs_leaf = breadcrumbs.pop()[0] # If filesystem_path is None, this is the root directory listing files, dirs = self.build_directory_listing(path, filenames, filesystem_path, add_trailing_slash) # Mark the request as done so we know we can close the share if in auto-stop mode. self.web.done = True # Render and return the response. return self.directory_listing_template( path, files, dirs, breadcrumbs, breadcrumbs_leaf ) def build_directory_listing(self, path, filenames, filesystem_path, add_trailing_slash=False): files = [] dirs = [] for filename in filenames: if filesystem_path: this_filesystem_path = os.path.join(filesystem_path, filename) else: this_filesystem_path = self.files[filename] is_dir = os.path.isdir(this_filesystem_path) if is_dir: if add_trailing_slash: dirs.append( {"link": os.path.join(f"/{path}", quote(filename), ""), "basename": filename} ) else: dirs.append( {"link": os.path.join(f"/{path}", quote(filename)), "basename": filename} ) else: size = os.path.getsize(this_filesystem_path) size_human = self.common.human_readable_filesize(size) files.append( { "link": os.path.join(f"/{path}", quote(filename)), "basename": filename, "size_human": size_human, } ) return files, dirs def stream_individual_file(self, filesystem_path): """ Return a flask response that's streaming the download of an individual file, and gzip compressing it if the browser supports it. """ use_gzip = self.should_use_gzip() # gzip compress the individual file, if it hasn't already been compressed if use_gzip: if filesystem_path not in self.gzip_individual_files: gzip_filename = os.path.join( self.gzip_tmp_dir.name, str(self.gzip_counter) ) self.gzip_counter += 1 self._gzip_compress(filesystem_path, gzip_filename, 6, None) self.gzip_individual_files[filesystem_path] = gzip_filename file_to_download = self.gzip_individual_files[filesystem_path] filesize = os.path.getsize(self.gzip_individual_files[filesystem_path]) else: file_to_download = filesystem_path filesize = os.path.getsize(filesystem_path) path = request.path # Tell GUI the individual file started history_id = self.cur_history_id self.cur_history_id += 1 self.web.add_request( self.web.REQUEST_INDIVIDUAL_FILE_STARTED, path, {"id": history_id, "filesize": filesize}, ) def generate(): chunk_size = 102400 # 100kb fp = open(file_to_download, "rb") self.web.done = False while not self.web.done: chunk = fp.read(chunk_size) if chunk == b"": self.web.done = True else: try: yield chunk # Tell GUI the progress downloaded_bytes = fp.tell() percent = (1.0 * downloaded_bytes / filesize) * 100 if ( not self.web.is_gui or self.common.platform == "Linux" or self.common.platform == "BSD" ): if self.web.settings.get(self.web.mode, "log_filenames"): # Decode and sanitize the path to remove newlines decoded_path = unquote(path) decoded_path = decoded_path.replace("\r", "").replace("\n", "") filename_str = f"{decoded_path} - " else: filename_str = "" sys.stdout.write( "\r{0}{1:s}, {2:.2f}% ".format( filename_str, self.common.human_readable_filesize( downloaded_bytes ), percent, ) ) sys.stdout.flush() self.web.add_request( self.web.REQUEST_INDIVIDUAL_FILE_PROGRESS, path, { "id": history_id, "bytes": downloaded_bytes, "filesize": filesize, }, ) self.web.done = False except Exception: # Looks like the download was canceled self.web.done = True # Tell the GUI the individual file was canceled self.web.add_request( self.web.REQUEST_INDIVIDUAL_FILE_CANCELED, path, {"id": history_id}, ) fp.close() sys.stdout.write("\n") basename = os.path.basename(filesystem_path) r = Response(generate()) if use_gzip: r.headers.set("Content-Encoding", "gzip") r.headers.set("Content-Length", filesize) filename_dict = { "filename": unidecode(basename), "filename*": "UTF-8''%s" % quote(basename), } r.headers.set("Content-Disposition", "inline", **filename_dict) (content_type, _) = mimetypes.guess_type(basename, strict=False) if content_type is not None: r.headers.set("Content-Type", content_type) return r def should_use_gzip(self): """ Should we use gzip for this browser? """ return (not self.is_zipped) and ( "gzip" in request.headers.get("Accept-Encoding", "").lower() ) def _gzip_compress( self, input_filename, output_filename, level, processed_size_callback=None ): """ Compress a file with gzip, without loading the whole thing into memory Thanks: https://stackoverflow.com/questions/27035296/python-how-to-gzip-a-large-text-file-without-memoryerror """ bytes_processed = 0 blocksize = 1 << 16 # 64kB with open(input_filename, "rb") as input_file: output_file = gzip.open(output_filename, "wb", level) while True: if processed_size_callback is not None: processed_size_callback(bytes_processed) block = input_file.read(blocksize) if len(block) == 0: break output_file.write(block) bytes_processed += blocksize output_file.close() def init(self): """ Inherited class will implement this """ pass def define_routes(self): """ Inherited class will implement this """ pass def directory_listing_template(self): """ Inherited class will implement this. It should call render_template and return the response. """ pass def set_file_info_custom(self, filenames, processed_size_callback): """ Inherited class will implement this. """ pass def render_logic(self, path=""): """ Inherited class will implement this. """ pass onionshare-2.6.3/cli/onionshare_cli/web/share_mode.py000066400000000000000000000524741475545702100227150ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import binascii import hashlib import os import sys import tempfile import zipfile import mimetypes from datetime import datetime, timezone from flask import Response, request, render_template, make_response, abort from unidecode import unidecode from werkzeug.http import parse_date, http_date from urllib.parse import quote, unquote from .send_base_mode import SendBaseModeWeb def make_etag(data): hasher = hashlib.sha256() while True: read_bytes = data.read(4096) if read_bytes: hasher.update(read_bytes) else: break hash_value = binascii.hexlify(hasher.digest()).decode("utf-8") return '"sha256:{}"'.format(hash_value) def parse_range_header(range_header: str, target_size: int) -> list: end_index = target_size - 1 if range_header is None: return [(0, end_index)] bytes_ = "bytes=" if not range_header.startswith(bytes_): abort(416) ranges = [] for range_ in range_header[len(bytes_) :].split(","): split = range_.split("-") if len(split) == 1: try: start = int(split[0]) end = end_index except ValueError: abort(416) elif len(split) == 2: start, end = split[0], split[1] if not start: # parse ranges of the form "bytes=-100" (i.e., last 100 bytes) end = end_index try: start = end - int(split[1]) + 1 except ValueError: abort(416) else: # parse ranges of the form "bytes=100-200" try: start = int(start) if not end: end = target_size else: end = int(end) except ValueError: abort(416) if end < start: abort(416) end = min(end, end_index) else: abort(416) ranges.append((start, end)) # merge the ranges merged = [] ranges = sorted(ranges, key=lambda x: x[0]) for range_ in ranges: # initial case if not merged: merged.append(range_) else: # merge ranges that are adjacent or overlapping if range_[0] <= merged[-1][1] + 1: merged[-1] = (merged[-1][0], max(range_[1], merged[-1][1])) else: merged.append(range_) return merged class ShareModeWeb(SendBaseModeWeb): """ All of the web logic for share mode """ def init(self): self.common.log("ShareModeWeb", "init") # Allow downloading individual files if "Stop sharing after files have been sent" is unchecked self.download_individual_files = not self.web.settings.get( "share", "autostop_sharing" ) self.download_etag = None self.gzip_etag = None self.last_modified = datetime.now(tz=timezone.utc) def define_routes(self): """ The web app routes for sharing files """ @self.web.app.route( "/", defaults={"path": ""}, methods=["GET"], provide_automatic_options=False ) @self.web.app.route( "/", methods=["GET"], provide_automatic_options=False ) def index(path): """ Render the template for the onionshare landing page. """ self.web.add_request(self.web.REQUEST_LOAD, request.path) # Deny new downloads if "Stop sharing after files have been sent" is checked and there is # currently a download deny_download = ( self.web.settings.get("share", "autostop_sharing") and self.download_in_progress ) if deny_download: return render_template("denied.html") # If download is allowed to continue, serve download page if self.should_use_gzip(): self.filesize = self.gzip_filesize else: self.filesize = self.download_filesize return self.render_logic(path) @self.web.app.route( "/download", methods=["GET"], provide_automatic_options=False ) def download(): """ Download the zip file. """ # Deny new downloads if "Stop After First Download" is checked and there is # currently a download deny_download = ( self.web.settings.get("share", "autostop_sharing") and self.download_in_progress ) if deny_download: return render_template("denied.html") # Prepare some variables to use inside generate() function below # which is outside of the request context request_path = request.path # If this is a zipped file, then serve as-is. If it's not zipped, then, # if the http client supports gzip compression, gzip the file first # and serve that use_gzip = self.should_use_gzip() if use_gzip: file_to_download = self.gzip_filename self.filesize = self.gzip_filesize etag = self.gzip_etag else: file_to_download = self.download_filename self.filesize = self.download_filesize etag = self.download_etag # for range requests range_, status_code = self.get_range_and_status_code( self.filesize, etag, self.last_modified ) # Tell GUI the download started history_id = self.cur_history_id self.cur_history_id += 1 self.web.add_request( self.web.REQUEST_STARTED, request_path, {"id": history_id, "use_gzip": use_gzip}, ) basename = os.path.basename(self.download_filename) if status_code == 304: r = Response() else: r = Response( self.generate( range_, file_to_download, request_path, history_id, self.filesize, ) ) if use_gzip: r.headers.set("Content-Encoding", "gzip") r.headers.set("Content-Length", range_[1] - range_[0] + 1) filename_dict = { "filename": unidecode(basename), "filename*": "UTF-8''%s" % quote(basename), } r.headers.set("Content-Disposition", "attachment", **filename_dict) # guess content type (content_type, _) = mimetypes.guess_type(basename, strict=False) if content_type is not None: r.headers.set("Content-Type", content_type) r.headers.set("Accept-Ranges", "bytes") r.headers.set("ETag", etag) r.headers.set("Last-Modified", http_date(self.last_modified)) # we need to set this for range requests r.headers.set("Vary", "Accept-Encoding") if status_code == 206: r.headers.set( "Content-Range", "bytes {}-{}/{}".format(range_[0], range_[1], self.filesize), ) r.status_code = status_code return r @classmethod def get_range_and_status_code(cls, dl_size, etag, last_modified): use_default_range = True status_code = 200 range_header = request.headers.get("Range") # range requests are only allowed for get if request.method == "GET": ranges = parse_range_header(range_header, dl_size) if not ( len(ranges) == 1 and ranges[0][0] == 0 and ranges[0][1] == dl_size - 1 ): use_default_range = False status_code = 206 if range_header: if_range = request.headers.get("If-Range") if if_range and if_range != etag: use_default_range = True status_code = 200 if use_default_range: ranges = [(0, dl_size - 1)] if len(ranges) > 1: abort(416) # We don't support multipart range requests yet range_ = ranges[0] etag_header = request.headers.get("ETag") if etag_header is not None and etag_header != etag: abort(412) if_unmod = request.headers.get("If-Unmodified-Since") if if_unmod: if_date = parse_date(if_unmod) if if_date and not if_date.tzinfo: if_date = if_date.replace( tzinfo=timezone.utc ) # Compatible with Flask < 2.0.0 if if_date and if_date > last_modified: abort(412) elif range_header is None: status_code = 304 return range_, status_code def generate( self, range_, file_to_download, path, history_id, filesize ): # The user hasn't canceled the download self.client_cancel = False # Starting a new download if self.web.settings.get("share", "autostop_sharing"): self.download_in_progress = True start, end = range_ chunk_size = 102400 # 100kb fp = open(file_to_download, "rb") fp.seek(start) self.web.done = False canceled = False bytes_left = end - start + 1 while not self.web.done: # The user has canceled the download, so stop serving the file if not self.web.stop_q.empty(): self.web.add_request( self.web.REQUEST_CANCELED, path, {"id": history_id} ) break read_size = min(chunk_size, bytes_left) chunk = fp.read(read_size) if chunk == b"": self.web.done = True else: try: yield chunk # tell GUI the progress downloaded_bytes = fp.tell() percent = (1.0 * downloaded_bytes / filesize) * 100 bytes_left -= read_size # only output to stdout if running onionshare in CLI mode, or if using Linux (#203, #304) if ( not self.web.is_gui or self.common.platform == "Linux" or self.common.platform == "BSD" ): if self.web.settings.get("share", "log_filenames"): # Decode and sanitize the path to remove newlines decoded_path = unquote(path) decoded_path = decoded_path.replace("\r", "").replace("\n", "") filename_str = f"{decoded_path} - " else: filename_str = "" sys.stdout.write( "\r{0}{1:s}, {2:.2f}% ".format( filename_str, self.common.human_readable_filesize(downloaded_bytes), percent, ) ) sys.stdout.flush() self.web.add_request( self.web.REQUEST_PROGRESS, path, { "id": history_id, "bytes": downloaded_bytes, "total_bytes": filesize, }, ) self.web.done = False except Exception: # looks like the download was canceled self.web.done = True canceled = True # tell the GUI the download has canceled self.web.add_request( self.web.REQUEST_CANCELED, path, {"id": history_id} ) fp.close() sys.stdout.write("\n") # Download is finished if self.web.settings.get("share", "autostop_sharing"): self.download_in_progress = False # Close the server, if necessary if self.web.settings.get("share", "autostop_sharing") and not canceled: print("Stopped because transfer is complete") self.web.running = False try: self.web.stop() except Exception: pass def directory_listing_template( self, path, files, dirs, breadcrumbs, breadcrumbs_leaf ): return make_response( render_template( "send.html", file_info=self.file_info, files=files, dirs=dirs, breadcrumbs=breadcrumbs, breadcrumbs_leaf=breadcrumbs_leaf, filename=os.path.basename(self.download_filename), filesize=self.filesize, filesize_human=self.common.human_readable_filesize( self.download_filesize ), is_zipped=self.is_zipped, static_url_path=self.web.static_url_path, download_individual_files=self.download_individual_files, title=self.web.settings.get("general", "title"), ) ) def set_file_info_custom(self, filenames, processed_size_callback): self.common.log("ShareModeWeb", "set_file_info_custom") self.web.cancel_compression = False self.build_zipfile_list(filenames, processed_size_callback) def render_logic(self, path=""): if path in self.files: filesystem_path = self.files[path] # If it's a directory if os.path.isdir(filesystem_path): # Render directory listing filenames = [] for filename in os.listdir(filesystem_path): filenames.append(filename) filenames.sort() return self.directory_listing(filenames, path, filesystem_path) # If it's a file elif os.path.isfile(filesystem_path): if self.download_individual_files: return self.stream_individual_file(filesystem_path) else: history_id = self.cur_history_id self.cur_history_id += 1 return self.web.error404(history_id) # If it's not a directory or file, throw a 404 else: history_id = self.cur_history_id self.cur_history_id += 1 return self.web.error404(history_id) else: # Special case loading / if path == "": # Root directory listing filenames = list(self.root_files) filenames.sort() return self.directory_listing(filenames, path) else: # If the path isn't found, throw a 404 history_id = self.cur_history_id self.cur_history_id += 1 return self.web.error404(history_id) def build_zipfile_list(self, filenames, processed_size_callback=None): self.common.log("ShareModeWeb", "build_zipfile_list", f"filenames={filenames}") for filename in filenames: info = { "filename": filename, "basename": os.path.basename(filename.rstrip("/")), } if os.path.isfile(filename): info["size"] = os.path.getsize(filename) info["size_human"] = self.common.human_readable_filesize(info["size"]) self.file_info["files"].append(info) if os.path.isdir(filename): info["size"] = self.common.dir_size(filename) info["size_human"] = self.common.human_readable_filesize(info["size"]) self.file_info["dirs"].append(info) self.file_info["files"].sort(key=lambda k: k["basename"]) self.file_info["dirs"].sort(key=lambda k: k["basename"]) # Check if there's only 1 file and no folders if len(self.file_info["files"]) == 1 and len(self.file_info["dirs"]) == 0: self.download_filename = self.file_info["files"][0]["filename"] self.download_filesize = self.file_info["files"][0]["size"] with open(self.download_filename, "rb") as f: self.download_etag = make_etag(f) # Compress the file with gzip now, so we don't have to do it on each request self.gzip_tmp_dir = tempfile.TemporaryDirectory( dir=self.common.build_tmp_dir() ) self.gzip_filename = os.path.join(self.gzip_tmp_dir.name, "file.gz") self._gzip_compress( self.download_filename, self.gzip_filename, 6, processed_size_callback ) self.gzip_filesize = os.path.getsize(self.gzip_filename) with open(self.gzip_filename, "rb") as f: self.gzip_etag = make_etag(f) self.is_zipped = False # Cleanup this tempfile self.web.cleanup_tempdirs.append(self.gzip_tmp_dir) else: # Zip up the files and folders self.zip_writer = ZipWriter( self.common, self.web, processed_size_callback=processed_size_callback ) self.download_filename = self.zip_writer.zip_filename for info in self.file_info["files"]: self.zip_writer.add_file(info["filename"]) # Canceling early? if self.web.cancel_compression: self.zip_writer.close() return False for info in self.file_info["dirs"]: if not self.zip_writer.add_dir(info["filename"]): return False self.zip_writer.close() self.download_filesize = os.path.getsize(self.download_filename) with open(self.download_filename, "rb") as f: self.download_etag = make_etag(f) self.is_zipped = True return True class ZipWriter(object): """ ZipWriter accepts files and directories and compresses them into a zip file with. If a zip_filename is not passed in, it will use the default onionshare filename. """ def __init__( self, common, web=None, zip_filename=None, processed_size_callback=None ): self.common = common self.web = web self.cancel_compression = False if zip_filename: self.zip_filename = zip_filename else: self.zip_temp_dir = tempfile.TemporaryDirectory( dir=self.common.build_tmp_dir() ) self.zip_filename = f"{self.zip_temp_dir.name}/onionshare_{self.common.random_string(4, 6)}.zip" # Cleanup this temp dir if self.web: self.web.cleanup_tempdirs.append(self.zip_temp_dir) self.z = zipfile.ZipFile(self.zip_filename, "w", allowZip64=True) self.processed_size_callback = processed_size_callback if self.processed_size_callback is None: self.processed_size_callback = lambda _: None self._size = 0 self.processed_size_callback(self._size) def add_file(self, filename): """ Add a file to the zip archive. """ self.z.write(filename, os.path.basename(filename), zipfile.ZIP_DEFLATED) self._size += os.path.getsize(filename) self.processed_size_callback(self._size) def add_dir(self, filename): """ Add a directory, and all of its children, to the zip archive. """ dir_to_strip = os.path.dirname(filename.rstrip("/")) + "/" for dirpath, dirnames, filenames in os.walk(filename): for f in filenames: # Canceling early? if self.cancel_compression: return False full_filename = os.path.join(dirpath, f) if not os.path.islink(full_filename): arc_filename = full_filename[len(dir_to_strip) :] self.z.write(full_filename, arc_filename, zipfile.ZIP_DEFLATED) self._size += os.path.getsize(full_filename) self.processed_size_callback(self._size) return True def close(self): """ Close the zip archive. """ self.z.close() onionshare-2.6.3/cli/onionshare_cli/web/web.py000066400000000000000000000345501475545702100213570ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import logging import mimetypes import os import queue import requests import shutil from packaging.version import Version from waitress.server import create_server import flask from flask import ( Flask, request, render_template, abort, make_response, send_file, __version__ as flask_version, ) from flask_compress import Compress from flask_socketio import SocketIO from .share_mode import ShareModeWeb from .receive_mode import ReceiveModeWeb, ReceiveModeWSGIMiddleware, ReceiveModeRequest from .website_mode import WebsiteModeWeb from .chat_mode import ChatModeWeb # Stub out flask's show_server_banner function, to avoiding showing warnings that # are not applicable to OnionShare def stubbed_show_server_banner(env, debug, app_import_path=None, eager_loading=None): pass try: flask.cli.show_server_banner = stubbed_show_server_banner except Exception: pass class WaitressException(Exception): """ There was a problem starting the waitress web server. """ class Web: """ The Web object is the OnionShare web server, powered by flask """ REQUEST_LOAD = 0 REQUEST_STARTED = 1 REQUEST_PROGRESS = 2 REQUEST_CANCELED = 3 REQUEST_UPLOAD_INCLUDES_MESSAGE = 4 REQUEST_UPLOAD_FILE_RENAMED = 5 REQUEST_UPLOAD_SET_DIR = 6 REQUEST_UPLOAD_FINISHED = 7 REQUEST_UPLOAD_CANCELED = 8 REQUEST_INDIVIDUAL_FILE_STARTED = 9 REQUEST_INDIVIDUAL_FILE_PROGRESS = 10 REQUEST_INDIVIDUAL_FILE_CANCELED = 11 REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 12 REQUEST_OTHER = 13 def __init__(self, common, is_gui, mode_settings, mode="share"): self.common = common self.common.log("Web", "__init__", f"is_gui={is_gui}, mode={mode}") self.settings = mode_settings # Flask guesses the MIME type of files from a database on the operating # system. # Some operating systems, or applications that can modify the database # (such as the Windows Registry) can treat .js files as text/plain, # which breaks the chat app due to X-Content-Type-Options: nosniff. # # It's probably #notourbug but we can fix it by forcing the mimetype. # https://github.com/onionshare/onionshare/issues/1443 mimetypes.add_type("text/javascript", ".js") self.waitress = None # The flask app self.app = Flask( __name__, static_folder=self.common.get_resource_path("static"), static_url_path=f"/static_{self.common.random_string(16)}", # randomize static_url_path to avoid making /static unusable template_folder=self.common.get_resource_path("templates"), ) self.compress = Compress() self.compress.init_app(self.app) self.app.secret_key = self.common.random_string(8) self.generate_static_url_path() # Verbose mode? if self.common.verbose: self.verbose_mode() # Are we running in GUI mode? self.is_gui = is_gui # If the user stops the server while a transfer is in progress, it should # immediately stop the transfer. In order to make it thread-safe, stop_q # is a queue. If anything is in it, then the user stopped the server self.stop_q = queue.Queue() # Are we using receive mode? self.mode = mode if self.mode == "receive": # Use custom WSGI middleware, to modify environ self.app.wsgi_app = ReceiveModeWSGIMiddleware(self.app.wsgi_app, self) # Use a custom Request class to track upload progress self.app.request_class = ReceiveModeRequest # Starting in Flask 0.11, render_template_string autoescapes template variables # by default. To prevent content injection through template variables in # earlier versions of Flask, we force autoescaping in the Jinja2 template # engine if we detect a Flask version with insecure default behavior. if Version(flask_version) < Version("0.11"): # Monkey-patch in the fix from https://github.com/pallets/flask/commit/99c99c4c16b1327288fd76c44bc8635a1de452bc Flask.select_jinja_autoescape = self._safe_select_jinja_autoescape self.security_headers = [ ("X-Frame-Options", "DENY"), ("X-Xss-Protection", "1; mode=block"), ("X-Content-Type-Options", "nosniff"), ("Referrer-Policy", "no-referrer"), ("Server", "OnionShare"), ] self.q = queue.Queue() self.done = False # shutting down the server only works within the context of flask, so the easiest way to do it is over http self.shutdown_password = self.common.random_string(16) # Keep track if the server is running self.running = False # Define the web app routes self.define_common_routes() # Create the mode web object, which defines its own routes self.share_mode = None self.receive_mode = None self.website_mode = None self.chat_mode = None if self.mode == "share": self.share_mode = ShareModeWeb(self.common, self) elif self.mode == "receive": self.receive_mode = ReceiveModeWeb(self.common, self) elif self.mode == "website": self.website_mode = WebsiteModeWeb(self.common, self) elif self.mode == "chat": if self.common.verbose: try: self.socketio = SocketIO( async_mode="gevent", logger=True, engineio_logger=True ) except ValueError: self.socketio = SocketIO(logger=True, engineio_logger=True) else: try: self.socketio = SocketIO(async_mode="gevent") except ValueError: self.socketio = SocketIO() self.socketio.init_app(self.app) self.chat_mode = ChatModeWeb(self.common, self) self.cleanup_tempdirs = [] def get_mode(self): if self.mode == "share": return self.share_mode elif self.mode == "receive": return self.receive_mode elif self.mode == "website": return self.website_mode elif self.mode == "chat": return self.chat_mode else: return None def generate_static_url_path(self): # The static URL path has a 128-bit random number in it to avoid having name # collisions with files that might be getting shared self.static_url_path = f"/static_{self.common.random_string(16)}" self.common.log( "Web", "generate_static_url_path", f"new static_url_path is {self.static_url_path}", ) # Update the flask route to handle the new static URL path self.app.static_url_path = self.static_url_path self.app.add_url_rule( self.static_url_path + "/", view_func=self.app.send_static_file, ) def define_common_routes(self): """ Common web app routes between all modes. """ @self.app.after_request def add_security_headers(r): """ Add security headers to a response """ for header, value in self.security_headers: r.headers.set(header, value) # Set a CSP header unless in website mode and the user has disabled it default_csp = "default-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self'; img-src 'self' data:;" if self.mode != "website" or ( not self.settings.get("website", "disable_csp") and not self.settings.get("website", "custom_csp") ): r.headers.set("Content-Security-Policy", default_csp) else: if self.settings.get("website", "custom_csp"): r.headers.set( "Content-Security-Policy", self.settings.get("website", "custom_csp"), ) return r @self.app.errorhandler(404) def not_found(e): mode = self.get_mode() history_id = mode.cur_history_id mode.cur_history_id += 1 return self.error404(history_id) @self.app.errorhandler(405) def method_not_allowed(e): mode = self.get_mode() history_id = mode.cur_history_id mode.cur_history_id += 1 return self.error405(history_id) @self.app.errorhandler(500) def method_not_allowed(e): mode = self.get_mode() history_id = mode.cur_history_id mode.cur_history_id += 1 return self.error500(history_id) if self.mode != "website": @self.app.route("/favicon.ico") def favicon(): return send_file( f"{self.common.get_resource_path('static')}/img/favicon.ico" ) def error403(self): self.add_request(Web.REQUEST_OTHER, request.path) return render_template("403.html", static_url_path=self.static_url_path), 403 def error404(self, history_id): mode = self.get_mode() if mode.supports_file_requests: self.add_request( self.REQUEST_INDIVIDUAL_FILE_STARTED, request.path, {"id": history_id, "status_code": 404}, ) self.add_request(Web.REQUEST_OTHER, request.path) return render_template("404.html", static_url_path=self.static_url_path), 404 def error405(self, history_id): mode = self.get_mode() if mode.supports_file_requests: self.add_request( self.REQUEST_INDIVIDUAL_FILE_STARTED, request.path, {"id": history_id, "status_code": 405}, ) self.add_request(Web.REQUEST_OTHER, request.path) return render_template("405.html", static_url_path=self.static_url_path), 405 def error500(self, history_id): mode = self.get_mode() if mode.supports_file_requests: self.add_request( self.REQUEST_INDIVIDUAL_FILE_STARTED, request.path, {"id": history_id, "status_code": 500}, ) self.add_request(Web.REQUEST_OTHER, request.path) return render_template("500.html", static_url_path=self.static_url_path), 500 def _safe_select_jinja_autoescape(self, filename): if filename is None: return True return filename.endswith((".html", ".htm", ".xml", ".xhtml")) def add_request(self, request_type, path=None, data=None): """ Add a request to the queue, to communicate with the GUI. """ self.q.put({"type": request_type, "path": path, "data": data}) def verbose_mode(self): """ Turn on verbose mode, which will log flask errors to a file. """ flask_log_filename = os.path.join(self.common.build_data_dir(), "flask.log") log_handler = logging.FileHandler(flask_log_filename) log_handler.setLevel(logging.WARNING) self.app.logger.addHandler(log_handler) def start(self, port): """ Start the flask web server. """ self.common.log("Web", "start", f"port={port}") # Make sure the stop_q is empty when starting a new server while not self.stop_q.empty(): try: self.stop_q.get(block=False) except queue.Empty: pass # In Whonix, listen on 0.0.0.0 instead of 127.0.0.1 (#220) if os.path.exists("/usr/share/anon-ws-base-files/workstation"): host = "0.0.0.0" else: host = "127.0.0.1" self.running = True if self.mode == "chat": self.socketio.run(self.app, host=host, port=port) else: try: self.waitress = create_server( self.app, host=host, port=port, clear_untrusted_proxy_headers=True, ident="OnionShare", ) self.waitress.run() except Exception as e: if not self.waitress.shutdown: raise WaitressException(f"Error starting Waitress: {e}") def stop(self, port): """ Stop the flask web server by loading /shutdown. """ self.common.log("Web", "stop", "stopping server") # Let the mode know that the user stopped the server self.stop_q.put(True) # If in chat mode, shutdown the socket server rather than Waitress. if self.mode == "chat": self.socketio.stop() if self.waitress: self.waitress_custom_shutdown() def cleanup(self): """ Shut everything down and clean up temporary files, etc. """ self.common.log("Web", "cleanup") # Clean up the tempfile.NamedTemporaryDirectory objects for dir in self.cleanup_tempdirs: dir.cleanup() self.cleanup_tempdirs = [] def waitress_custom_shutdown(self): """Shutdown the Waitress server immediately""" # Code borrowed from https://github.com/Pylons/webtest/blob/4b8a3ebf984185ff4fefb31b4d0cf82682e1fcf7/webtest/http.py#L93-L104 self.waitress.shutdown = True while self.waitress._map: triggers = list(self.waitress._map.values()) for trigger in triggers: trigger.handle_close() self.waitress.maintenance(0) self.waitress.task_dispatcher.shutdown() return True onionshare-2.6.3/cli/onionshare_cli/web/website_mode.py000066400000000000000000000103161475545702100232420ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os from flask import render_template, make_response from .send_base_mode import SendBaseModeWeb class WebsiteModeWeb(SendBaseModeWeb): """ All of the web logic for website mode """ def init(self): pass def define_routes(self): """ The web app routes for sharing a website """ @self.web.app.route("/", defaults={"path": ""}, methods=["GET"], provide_automatic_options=False) @self.web.app.route("/", methods=["GET"], provide_automatic_options=False) def path_public(path): return path_logic(path) def path_logic(path=""): """ Render the onionshare website. """ return self.render_logic(path) def directory_listing_template( self, path, files, dirs, breadcrumbs, breadcrumbs_leaf ): return make_response( render_template( "listing.html", path=path, files=files, dirs=dirs, breadcrumbs=breadcrumbs, breadcrumbs_leaf=breadcrumbs_leaf, static_url_path=self.web.static_url_path, title=self.web.settings.get("general", "title"), ) ) def set_file_info_custom(self, filenames, processed_size_callback): self.common.log("WebsiteModeWeb", "set_file_info_custom") self.web.cancel_compression = True def render_logic(self, path=""): # Strip trailing slash path = path.rstrip("/") if path in self.files: filesystem_path = self.files[path] # If it's a directory if os.path.isdir(filesystem_path): # Is there an index.html? index_path = os.path.join(path, "index.html") if index_path in self.files: # Render it return self.stream_individual_file(self.files[index_path]) else: # Otherwise, render directory listing, and enforce trailing slash # which can help with relative asset links in sub-directories. filenames = [] for filename in os.listdir(filesystem_path): filenames.append(filename) filenames.sort() return self.directory_listing(filenames, path, filesystem_path, True) # If it's a file elif os.path.isfile(filesystem_path): return self.stream_individual_file(filesystem_path) # If it's not a directory or file, throw a 404 else: history_id = self.cur_history_id self.cur_history_id += 1 return self.web.error404(history_id) else: # Special case loading / if path == "": index_path = "index.html" if index_path in self.files: # Render it return self.stream_individual_file(self.files[index_path]) else: # Root directory listing filenames = list(self.root_files) filenames.sort() return self.directory_listing(filenames, path, None, True) else: # If the path isn't found, throw a 404 history_id = self.cur_history_id self.cur_history_id += 1 return self.web.error404(history_id) onionshare-2.6.3/cli/poetry.lock000066400000000000000000003310511475545702100166470ustar00rootroot00000000000000# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "bidict" version = "0.22.1" description = "The bidirectional mapping library for Python." optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "bidict-0.22.1-py3-none-any.whl", hash = "sha256:6ef212238eb884b664f28da76f33f1d28b260f665fc737b413b287d5487d1e7b"}, {file = "bidict-0.22.1.tar.gz", hash = "sha256:1e0f7f74e4860e6d0943a05d4134c63a2fad86f3d4732fb265bd79e4e856d81d"}, ] [package.extras] docs = ["furo", "sphinx", "sphinx-copybutton"] lint = ["pre-commit"] test = ["hypothesis", "pytest", "pytest-benchmark[histogram]", "pytest-cov", "pytest-xdist", "sortedcollections", "sortedcontainers", "sphinx"] [[package]] name = "blinker" version = "1.7.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "blinker-1.7.0-py3-none-any.whl", hash = "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9"}, {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] [[package]] name = "brotli" version = "1.1.0" description = "Python bindings for the Brotli compression library" optional = false python-versions = "*" groups = ["main"] markers = "platform_python_implementation != \"PyPy\"" files = [ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, ] [[package]] name = "brotlicffi" version = "1.1.0.0" description = "Python CFFI bindings to the Brotli library" optional = false python-versions = ">=3.7" groups = ["main"] markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, ] [package.dependencies] cffi = ">=1.0.0" [[package]] name = "certifi" version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main"] files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] pycparser = "*" [[package]] name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" groups = ["main"] files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "cython" version = "3.0.8" description = "The Cython compiler for writing C extensions in the Python language." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] files = [ {file = "Cython-3.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a846e0a38e2b24e9a5c5dc74b0e54c6e29420d88d1dafabc99e0fc0f3e338636"}, {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45523fdc2b78d79b32834cc1cc12dc2ca8967af87e22a3ee1bff20e77c7f5520"}, {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa0b7f3f841fe087410cab66778e2d3fb20ae2d2078a2be3dffe66c6574be39"}, {file = "Cython-3.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e87294e33e40c289c77a135f491cd721bd089f193f956f7b8ed5aa2d0b8c558f"}, {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a1df7a129344b1215c20096d33c00193437df1a8fcca25b71f17c23b1a44f782"}, {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:13c2a5e57a0358da467d97667297bf820b62a1a87ae47c5f87938b9bb593acbd"}, {file = "Cython-3.0.8-cp310-cp310-win32.whl", hash = "sha256:96b028f044f5880e3cb18ecdcfc6c8d3ce9d0af28418d5ab464509f26d8adf12"}, {file = "Cython-3.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:8140597a8b5cc4f119a1190f5a2228a84f5ca6d8d9ec386cfce24663f48b2539"}, {file = "Cython-3.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aae26f9663e50caf9657148403d9874eea41770ecdd6caf381d177c2b1bb82ba"}, {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:547eb3cdb2f8c6f48e6865d5a741d9dd051c25b3ce076fbca571727977b28ac3"}, {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a567d4b9ba70b26db89d75b243529de9e649a2f56384287533cf91512705bee"}, {file = "Cython-3.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d1426263b0e82fb22bda8ea60dc77a428581cc19e97741011b938445d383f1"}, {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c26daaeccda072459b48d211415fd1e5507c06bcd976fa0d5b8b9f1063467d7b"}, {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:289ce7838208211cd166e975865fd73b0649bf118170b6cebaedfbdaf4a37795"}, {file = "Cython-3.0.8-cp311-cp311-win32.whl", hash = "sha256:c8aa05f5e17f8042a3be052c24f2edc013fb8af874b0bf76907d16c51b4e7871"}, {file = "Cython-3.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:000dc9e135d0eec6ecb2b40a5b02d0868a2f8d2e027a41b0fe16a908a9e6de02"}, {file = "Cython-3.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90d3fe31db55685d8cb97d43b0ec39ef614fcf660f83c77ed06aa670cb0e164f"}, {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e24791ddae2324e88e3c902a765595c738f19ae34ee66bfb1a6dac54b1833419"}, {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f020fa1c0552052e0660790b8153b79e3fc9a15dbd8f1d0b841fe5d204a6ae6"}, {file = "Cython-3.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18bfa387d7a7f77d7b2526af69a65dbd0b731b8d941aaff5becff8e21f6d7717"}, {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fe81b339cffd87c0069c6049b4d33e28bdd1874625ee515785bf42c9fdff3658"}, {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:80fd94c076e1e1b1ee40a309be03080b75f413e8997cddcf401a118879863388"}, {file = "Cython-3.0.8-cp312-cp312-win32.whl", hash = "sha256:85077915a93e359a9b920280d214dc0cf8a62773e1f3d7d30fab8ea4daed670c"}, {file = "Cython-3.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:0cb2dcc565c7851f75d496f724a384a790fab12d1b82461b663e66605bec429a"}, {file = "Cython-3.0.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:870d2a0a7e3cbd5efa65aecdb38d715ea337a904ea7bb22324036e78fb7068e7"}, {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e8f2454128974905258d86534f4fd4f91d2f1343605657ecab779d80c9d6d5e"}, {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1949d6aa7bc792554bee2b67a9fe41008acbfe22f4f8df7b6ec7b799613a4b3"}, {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9f2c6e1b8f3bcd6cb230bac1843f85114780bb8be8614855b1628b36bb510e0"}, {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:05d7eddc668ae7993643f32c7661f25544e791edb745758672ea5b1a82ecffa6"}, {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bfabe115deef4ada5d23c87bddb11289123336dcc14347011832c07db616dd93"}, {file = "Cython-3.0.8-cp36-cp36m-win32.whl", hash = "sha256:0c38c9f0bcce2df0c3347285863621be904ac6b64c5792d871130569d893efd7"}, {file = "Cython-3.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6c46939c3983217d140999de7c238c3141f56b1ea349e47ca49cae899969aa2c"}, {file = "Cython-3.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:115f0a50f752da6c99941b103b5cb090da63eb206abbc7c2ad33856ffc73f064"}, {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c0f29246734561c90f36e70ed0506b61aa3d044e4cc4cba559065a2a741fae"}, {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab75242869ff71e5665fe5c96f3378e79e792fa3c11762641b6c5afbbbbe026"}, {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6717c06e9cfc6c1df18543cd31a21f5d8e378a40f70c851fa2d34f0597037abc"}, {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9d3f74388db378a3c6fd06e79a809ed98df3f56484d317b81ee762dbf3c263e0"}, {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae7ac561fd8253a9ae96311e91d12af5f701383564edc11d6338a7b60b285a6f"}, {file = "Cython-3.0.8-cp37-cp37m-win32.whl", hash = "sha256:97b2a45845b993304f1799664fa88da676ee19442b15fdcaa31f9da7e1acc434"}, {file = "Cython-3.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9e2be2b340fea46fb849d378f9b80d3c08ff2e81e2bfbcdb656e2e3cd8c6b2dc"}, {file = "Cython-3.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2cde23c555470db3f149ede78b518e8274853745289c956a0e06ad8d982e4db9"}, {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7990ca127e1f1beedaf8fc8bf66541d066ef4723ad7d8d47a7cbf842e0f47580"}, {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b983c8e6803f016146c26854d9150ddad5662960c804ea7f0c752c9266752f0"}, {file = "Cython-3.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a973268d7ca1a2bdf78575e459a94a78e1a0a9bb62a7db0c50041949a73b02ff"}, {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:61a237bc9dd23c7faef0fcfce88c11c65d0c9bb73c74ccfa408b3a012073c20e"}, {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3a3d67f079598af49e90ff9655bf85bd358f093d727eb21ca2708f467c489cae"}, {file = "Cython-3.0.8-cp38-cp38-win32.whl", hash = "sha256:17a642bb01a693e34c914106566f59844b4461665066613913463a719e0dd15d"}, {file = "Cython-3.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:2cdfc32252f3b6dc7c94032ab744dcedb45286733443c294d8f909a4854e7f83"}, {file = "Cython-3.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa97893d99385386925d00074654aeae3a98867f298d1e12ceaf38a9054a9bae"}, {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05c0bf9d085c031df8f583f0d506aa3be1692023de18c45d0aaf78685bbb944"}, {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de892422582f5758bd8de187e98ac829330ec1007bc42c661f687792999988a7"}, {file = "Cython-3.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:314f2355a1f1d06e3c431eaad4708cf10037b5e91e4b231d89c913989d0bdafd"}, {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:78825a3774211e7d5089730f00cdf7f473042acc9ceb8b9eeebe13ed3a5541de"}, {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df8093deabc55f37028190cf5e575c26aad23fc673f34b85d5f45076bc37ce39"}, {file = "Cython-3.0.8-cp39-cp39-win32.whl", hash = "sha256:1aca1b97e0095b3a9a6c33eada3f661a4ed0d499067d121239b193e5ba3bb4f0"}, {file = "Cython-3.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:16873d78be63bd38ffb759da7ab82814b36f56c769ee02b1d5859560e4c3ac3c"}, {file = "Cython-3.0.8-py2.py3-none-any.whl", hash = "sha256:171b27051253d3f9108e9759e504ba59ff06e7f7ba944457f94deaf9c21bf0b6"}, {file = "Cython-3.0.8.tar.gz", hash = "sha256:8333423d8fd5765e7cceea3a9985dd1e0a5dfeb2734629e1a2ed2d6233d39de6"}, ] [[package]] name = "dnspython" version = "2.7.0" description = "DNS toolkit" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, ] [package.extras] dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] dnssec = ["cryptography (>=43)"] doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] doq = ["aioquic (>=1.0.0)"] idna = ["idna (>=3.7)"] trio = ["trio (>=0.23)"] wmi = ["wmi (>=1.5.1)"] [[package]] name = "eventlet" version = "0.39.0" description = "Highly concurrent networking library" optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "eventlet-0.39.0-py3-none-any.whl", hash = "sha256:9522ca09ad4c1f874c238f06492a7e217ddb13bdeace4475d3b700dd0ba1f6be"}, {file = "eventlet-0.39.0.tar.gz", hash = "sha256:01ba0aa6ee2452690fc02b274a2409598a13b997c7b5af9dc66600fa42015a79"}, ] [package.dependencies] dnspython = ">=1.15.0" greenlet = ">=1.0" [package.extras] dev = ["black", "build", "commitizen", "isort", "pip-tools", "pre-commit", "twine"] [[package]] name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] test = ["pytest (>=6)"] [[package]] name = "flask" version = "2.3.2" description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "Flask-2.3.2-py3-none-any.whl", hash = "sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0"}, {file = "Flask-2.3.2.tar.gz", hash = "sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"}, ] [package.dependencies] blinker = ">=1.6.2" click = ">=8.1.3" itsdangerous = ">=2.1.2" Jinja2 = ">=3.1.2" Werkzeug = ">=2.3.3" [package.extras] async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] [[package]] name = "flask-compress" version = "1.14" description = "Compress responses in your Flask app with gzip, deflate or brotli." optional = false python-versions = "*" groups = ["main"] files = [ {file = "Flask-Compress-1.14.tar.gz", hash = "sha256:e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee"}, {file = "Flask_Compress-1.14-py3-none-any.whl", hash = "sha256:b86c9808f0f38ea2246c9730972cf978f2cdf6a9a1a69102ba81e07891e6b26c"}, ] [package.dependencies] brotli = {version = "*", markers = "platform_python_implementation != \"PyPy\""} brotlicffi = {version = "*", markers = "platform_python_implementation == \"PyPy\""} flask = "*" [[package]] name = "flask-socketio" version = "5.3.4" description = "Socket.IO integration for Flask applications" optional = false python-versions = ">=3.6" groups = ["main"] files = [ {file = "Flask-SocketIO-5.3.4.tar.gz", hash = "sha256:1cbd379c9bf68ac37bcc4750d01708922fa6365d13a5447d3f8893792879410c"}, {file = "Flask_SocketIO-5.3.4-py3-none-any.whl", hash = "sha256:564acfb24dcc9545cdae536cde0323653d9b547069a925f11eeb132338aa71c0"}, ] [package.dependencies] Flask = ">=0.9" python-socketio = ">=5.0.2" [[package]] name = "gevent" version = "23.9.1" description = "Coroutine-based network library" optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "gevent-23.9.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:a3c5e9b1f766a7a64833334a18539a362fb563f6c4682f9634dea72cbe24f771"}, {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b101086f109168b23fa3586fccd1133494bdb97f86920a24dc0b23984dc30b69"}, {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36a549d632c14684bcbbd3014a6ce2666c5f2a500f34d58d32df6c9ea38b6535"}, {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:272cffdf535978d59c38ed837916dfd2b5d193be1e9e5dcc60a5f4d5025dd98a"}, {file = "gevent-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcb8612787a7f4626aa881ff15ff25439561a429f5b303048f0fca8a1c781c39"}, {file = "gevent-23.9.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d57737860bfc332b9b5aa438963986afe90f49645f6e053140cfa0fa1bdae1ae"}, {file = "gevent-23.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5f3c781c84794926d853d6fb58554dc0dcc800ba25c41d42f6959c344b4db5a6"}, {file = "gevent-23.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dbb22a9bbd6a13e925815ce70b940d1578dbe5d4013f20d23e8a11eddf8d14a7"}, {file = "gevent-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:707904027d7130ff3e59ea387dddceedb133cc742b00b3ffe696d567147a9c9e"}, {file = "gevent-23.9.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:45792c45d60f6ce3d19651d7fde0bc13e01b56bb4db60d3f32ab7d9ec467374c"}, {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e24c2af9638d6c989caffc691a039d7c7022a31c0363da367c0d32ceb4a0648"}, {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e1ead6863e596a8cc2a03e26a7a0981f84b6b3e956101135ff6d02df4d9a6b07"}, {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65883ac026731ac112184680d1f0f1e39fa6f4389fd1fc0bf46cc1388e2599f9"}, {file = "gevent-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf7af500da05363e66f122896012acb6e101a552682f2352b618e541c941a011"}, {file = "gevent-23.9.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c3e5d2fa532e4d3450595244de8ccf51f5721a05088813c1abd93ad274fe15e7"}, {file = "gevent-23.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c84d34256c243b0a53d4335ef0bc76c735873986d478c53073861a92566a8d71"}, {file = "gevent-23.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ada07076b380918829250201df1d016bdafb3acf352f35e5693b59dceee8dd2e"}, {file = "gevent-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:921dda1c0b84e3d3b1778efa362d61ed29e2b215b90f81d498eb4d8eafcd0b7a"}, {file = "gevent-23.9.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ed7a048d3e526a5c1d55c44cb3bc06cfdc1947d06d45006cc4cf60dedc628904"}, {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c1abc6f25f475adc33e5fc2dbcc26a732608ac5375d0d306228738a9ae14d3b"}, {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4368f341a5f51611411ec3fc62426f52ac3d6d42eaee9ed0f9eebe715c80184e"}, {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52b4abf28e837f1865a9bdeef58ff6afd07d1d888b70b6804557e7908032e599"}, {file = "gevent-23.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52e9f12cd1cda96603ce6b113d934f1aafb873e2c13182cf8e86d2c5c41982ea"}, {file = "gevent-23.9.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:de350fde10efa87ea60d742901e1053eb2127ebd8b59a7d3b90597eb4e586599"}, {file = "gevent-23.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fde6402c5432b835fbb7698f1c7f2809c8d6b2bd9d047ac1f5a7c1d5aa569303"}, {file = "gevent-23.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dd6c32ab977ecf7c7b8c2611ed95fa4aaebd69b74bf08f4b4960ad516861517d"}, {file = "gevent-23.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:455e5ee8103f722b503fa45dedb04f3ffdec978c1524647f8ba72b4f08490af1"}, {file = "gevent-23.9.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:7ccf0fd378257cb77d91c116e15c99e533374a8153632c48a3ecae7f7f4f09fe"}, {file = "gevent-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d163d59f1be5a4c4efcdd13c2177baaf24aadf721fdf2e1af9ee54a998d160f5"}, {file = "gevent-23.9.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7532c17bc6c1cbac265e751b95000961715adef35a25d2b0b1813aa7263fb397"}, {file = "gevent-23.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:78eebaf5e73ff91d34df48f4e35581ab4c84e22dd5338ef32714264063c57507"}, {file = "gevent-23.9.1-cp38-cp38-win32.whl", hash = "sha256:f632487c87866094546a74eefbca2c74c1d03638b715b6feb12e80120960185a"}, {file = "gevent-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:62d121344f7465e3739989ad6b91f53a6ca9110518231553fe5846dbe1b4518f"}, {file = "gevent-23.9.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:bf456bd6b992eb0e1e869e2fd0caf817f0253e55ca7977fd0e72d0336a8c1c6a"}, {file = "gevent-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43daf68496c03a35287b8b617f9f91e0e7c0d042aebcc060cadc3f049aadd653"}, {file = "gevent-23.9.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7c28e38dcde327c217fdafb9d5d17d3e772f636f35df15ffae2d933a5587addd"}, {file = "gevent-23.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fae8d5b5b8fa2a8f63b39f5447168b02db10c888a3e387ed7af2bd1b8612e543"}, {file = "gevent-23.9.1-cp39-cp39-win32.whl", hash = "sha256:2c7b5c9912378e5f5ccf180d1fdb1e83f42b71823483066eddbe10ef1a2fcaa2"}, {file = "gevent-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:a2898b7048771917d85a1d548fd378e8a7b2ca963db8e17c6d90c76b495e0e2b"}, {file = "gevent-23.9.1.tar.gz", hash = "sha256:72c002235390d46f94938a96920d8856d4ffd9ddf62a303a0d7c118894097e34"}, ] [package.dependencies] cffi = {version = ">=1.12.2", markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\""} greenlet = [ {version = ">=2.0.0", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""}, {version = ">=3.0rc3", markers = "platform_python_implementation == \"CPython\" and python_version >= \"3.11\""}, ] "zope.event" = "*" "zope.interface" = "*" [package.extras] dnspython = ["dnspython (>=1.16.0,<2.0)", "idna"] docs = ["furo", "repoze.sphinx.autointerface", "sphinx", "sphinxcontrib-programoutput", "zope.schema"] monitor = ["psutil (>=5.7.0)"] recommended = ["cffi (>=1.12.2)", "dnspython (>=1.16.0,<2.0)", "idna", "psutil (>=5.7.0)"] test = ["cffi (>=1.12.2)", "coverage (>=5.0)", "dnspython (>=1.16.0,<2.0)", "idna", "objgraph", "psutil (>=5.7.0)", "requests", "setuptools"] [[package]] name = "gevent-websocket" version = "0.10.1" description = "Websocket handler for the gevent pywsgi server, a Python network library" optional = false python-versions = "*" groups = ["main"] files = [ {file = "gevent-websocket-0.10.1.tar.gz", hash = "sha256:7eaef32968290c9121f7c35b973e2cc302ffb076d018c9068d2f5ca8b2d85fb0"}, {file = "gevent_websocket-0.10.1-py3-none-any.whl", hash = "sha256:17b67d91282f8f4c973eba0551183fc84f56f1c90c8f6b6b30256f31f66f5242"}, ] [package.dependencies] gevent = "*" [[package]] name = "greenlet" version = "3.0.3" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, ] [package.extras] docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] [[package]] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" groups = ["main"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] name = "itsdangerous" version = "2.1.2" description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, ] [[package]] name = "jinja2" version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] [[package]] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "packaging" version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "dev"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] name = "pluggy" version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" groups = ["main"] files = [ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, ] [package.extras] test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "pycparser" version = "2.21" description = "C parser in Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] [[package]] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" optional = false python-versions = ">=3.6" groups = ["main"] files = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] [package.dependencies] cffi = ">=1.4.1" [package.extras] docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] [[package]] name = "pypng" version = "0.20220715.0" description = "Pure Python library for saving and loading PNG images" optional = false python-versions = "*" groups = ["main"] files = [ {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, ] [[package]] name = "pysocks" version = "1.7.1" description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] files = [ {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, ] [[package]] name = "pytest" version = "8.0.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=1.3.0,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "python-engineio" version = "4.9.0" description = "Engine.IO server and client for Python" optional = false python-versions = ">=3.6" groups = ["main"] files = [ {file = "python-engineio-4.9.0.tar.gz", hash = "sha256:e87459c15638e567711fd156e6f9c4a402668871bed79523f0ecfec744729ec7"}, {file = "python_engineio-4.9.0-py3-none-any.whl", hash = "sha256:979859bff770725b75e60353d7ae53b397e8b517d05ba76733b404a3dcca3e4c"}, ] [package.dependencies] simple-websocket = ">=0.10.0" [package.extras] asyncio-client = ["aiohttp (>=3.4)"] client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] docs = ["sphinx"] [[package]] name = "python-socketio" version = "5.11.1" description = "Socket.IO server and client for Python" optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "python-socketio-5.11.1.tar.gz", hash = "sha256:bbcbd758ed8c183775cb2853ba001361e2fa018babf5cbe11a5b77e91c2ec2a2"}, {file = "python_socketio-5.11.1-py3-none-any.whl", hash = "sha256:f1a0228b8b1fbdbd93fbbedd821ebce0ef54b2b5bf6e98fcf710deaa7c574259"}, ] [package.dependencies] bidict = ">=0.21.0" python-engineio = ">=4.8.0" [package.extras] asyncio-client = ["aiohttp (>=3.4)"] client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] docs = ["sphinx"] [[package]] name = "qrcode" version = "7.4.2" description = "QR Code image generator" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} pypng = "*" typing-extensions = "*" [package.extras] all = ["pillow (>=9.1.0)", "pytest", "pytest-cov", "tox", "zest.releaser[recommended]"] dev = ["pytest", "pytest-cov", "tox"] maintainer = ["zest.releaser[recommended]"] pil = ["pillow (>=9.1.0)"] test = ["coverage", "pytest"] [[package]] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""} urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" version = "75.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "simple-websocket" version = "1.0.0" description = "Simple WebSocket server and client for Python" optional = false python-versions = ">=3.6" groups = ["main"] files = [ {file = "simple-websocket-1.0.0.tar.gz", hash = "sha256:17d2c72f4a2bd85174a97e3e4c88b01c40c3f81b7b648b0cc3ce1305968928c8"}, {file = "simple_websocket-1.0.0-py3-none-any.whl", hash = "sha256:1d5bf585e415eaa2083e2bcf02a3ecf91f9712e7b3e6b9fa0b461ad04e0837bc"}, ] [package.dependencies] wsproto = "*" [package.extras] docs = ["sphinx"] [[package]] name = "stem" version = "1.8.1" description = "Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/)." optional = false python-versions = "*" groups = ["main"] files = [ {file = "stem-1.8.1.tar.gz", hash = "sha256:81d43a7c668ba9d7bc1103b2e7a911e9d148294b373d27a59ae8da79ef7a3e2f"}, ] [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] [[package]] name = "typing-extensions" version = "4.9.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] name = "unidecode" version = "1.3.8" description = "ASCII transliterations of Unicode text" optional = false python-versions = ">=3.5" groups = ["main"] files = [ {file = "Unidecode-1.3.8-py3-none-any.whl", hash = "sha256:d130a61ce6696f8148a3bd8fe779c99adeb4b870584eeb9526584e9aa091fd39"}, {file = "Unidecode-1.3.8.tar.gz", hash = "sha256:cfdb349d46ed3873ece4586b96aa75258726e2fa8ec21d6f00a591d98806c2f4"}, ] [[package]] name = "urllib3" version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "waitress" version = "3.0.2" description = "Waitress WSGI server" optional = false python-versions = ">=3.9.0" groups = ["main"] files = [ {file = "waitress-3.0.2-py3-none-any.whl", hash = "sha256:c56d67fd6e87c2ee598b76abdd4e96cfad1f24cacdea5078d382b1f9d7b5ed2e"}, {file = "waitress-3.0.2.tar.gz", hash = "sha256:682aaaf2af0c44ada4abfb70ded36393f0e307f4ab9456a215ce0020baefc31f"}, ] [package.extras] docs = ["Sphinx (>=1.8.1)", "docutils", "pylons-sphinx-themes (>=1.0.9)"] testing = ["coverage (>=7.6.0)", "pytest", "pytest-cov"] [[package]] name = "werkzeug" version = "3.0.6" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" groups = ["main"] files = [ {file = "werkzeug-3.0.6-py3-none-any.whl", hash = "sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17"}, {file = "werkzeug-3.0.6.tar.gz", hash = "sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d"}, ] [package.dependencies] MarkupSafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] [[package]] name = "wheel" version = "0.41.3" description = "A built-package format for Python" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "wheel-0.41.3-py3-none-any.whl", hash = "sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942"}, {file = "wheel-0.41.3.tar.gz", hash = "sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841"}, ] [package.extras] test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "wsproto" version = "1.2.0" description = "WebSockets state-machine based protocol implementation" optional = false python-versions = ">=3.7.0" groups = ["main"] files = [ {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, ] [package.dependencies] h11 = ">=0.9.0,<1" [[package]] name = "zope-event" version = "5.0" description = "Very basic event publishing system" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "zope.event-5.0-py3-none-any.whl", hash = "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26"}, {file = "zope.event-5.0.tar.gz", hash = "sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd"}, ] [package.dependencies] setuptools = "*" [package.extras] docs = ["Sphinx"] test = ["zope.testrunner"] [[package]] name = "zope-interface" version = "6.1" description = "Interfaces for Python" optional = false python-versions = ">=3.7" groups = ["main"] files = [ {file = "zope.interface-6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb"}, {file = "zope.interface-6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92"}, {file = "zope.interface-6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3"}, {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe81def9cf3e46f16ce01d9bfd8bea595e06505e51b7baf45115c77352675fd"}, {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dc998f6de015723196a904045e5a2217f3590b62ea31990672e31fbc5370b41"}, {file = "zope.interface-6.1-cp310-cp310-win_amd64.whl", hash = "sha256:239a4a08525c080ff833560171d23b249f7f4d17fcbf9316ef4159f44997616f"}, {file = "zope.interface-6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1"}, {file = "zope.interface-6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736"}, {file = "zope.interface-6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605"}, {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8"}, {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de"}, {file = "zope.interface-6.1-cp311-cp311-win_amd64.whl", hash = "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1"}, {file = "zope.interface-6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8bb9c990ca9027b4214fa543fd4025818dc95f8b7abce79d61dc8a2112b561a"}, {file = "zope.interface-6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b51b64432eed4c0744241e9ce5c70dcfecac866dff720e746d0a9c82f371dfa7"}, {file = "zope.interface-6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa6fd016e9644406d0a61313e50348c706e911dca29736a3266fc9e28ec4ca6d"}, {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff"}, {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e30506bcb03de8983f78884807e4fd95d8db6e65b69257eea05d13d519b83ac0"}, {file = "zope.interface-6.1-cp312-cp312-win_amd64.whl", hash = "sha256:e33e86fd65f369f10608b08729c8f1c92ec7e0e485964670b4d2633a4812d36b"}, {file = "zope.interface-6.1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:2f8d89721834524a813f37fa174bac074ec3d179858e4ad1b7efd4401f8ac45d"}, {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c"}, {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef43ee91c193f827e49599e824385ec7c7f3cd152d74cb1dfe02cb135f264d83"}, {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e441e8b7d587af0414d25e8d05e27040d78581388eed4c54c30c0c91aad3a379"}, {file = "zope.interface-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f89b28772fc2562ed9ad871c865f5320ef761a7fcc188a935e21fe8b31a38ca9"}, {file = "zope.interface-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70d2cef1bf529bff41559be2de9d44d47b002f65e17f43c73ddefc92f32bf00f"}, {file = "zope.interface-6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ad54ed57bdfa3254d23ae04a4b1ce405954969c1b0550cc2d1d2990e8b439de1"}, {file = "zope.interface-6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef467d86d3cfde8b39ea1b35090208b0447caaabd38405420830f7fd85fbdd56"}, {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6af47f10cfc54c2ba2d825220f180cc1e2d4914d783d6fc0cd93d43d7bc1c78b"}, {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9559138690e1bd4ea6cd0954d22d1e9251e8025ce9ede5d0af0ceae4a401e43"}, {file = "zope.interface-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:964a7af27379ff4357dad1256d9f215047e70e93009e532d36dcb8909036033d"}, {file = "zope.interface-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:387545206c56b0315fbadb0431d5129c797f92dc59e276b3ce82db07ac1c6179"}, {file = "zope.interface-6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57d0a8ce40ce440f96a2c77824ee94bf0d0925e6089df7366c2272ccefcb7941"}, {file = "zope.interface-6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ebc4d34e7620c4f0da7bf162c81978fce0ea820e4fa1e8fc40ee763839805f3"}, {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a804abc126b33824a44a7aa94f06cd211a18bbf31898ba04bd0924fbe9d282d"}, {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac"}, {file = "zope.interface-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40"}, {file = "zope.interface-6.1.tar.gz", hash = "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"}, ] [package.dependencies] setuptools = "*" [package.extras] docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" content-hash = "92dac9c4dbbdf94b9dc1f9bf5149be1e87be7d0c6b5a2773c6f10f54cb93e76d" onionshare-2.6.3/cli/pyproject.toml000066400000000000000000000030361475545702100173660ustar00rootroot00000000000000[tool.poetry] name = "onionshare_cli" version = "2.6.3" description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." authors = ["Micah Lee "] license = "GPLv3+" classifiers = [ "Programming Language :: Python :: 3", "Framework :: Flask", "Topic :: Communications :: File Sharing", "Topic :: Security :: Cryptography", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Intended Audience :: End Users/Desktop", "Operating System :: OS Independent", "Environment :: Web Environment", ] [tool.poetry.dependencies] python = ">=3.10,<3.13" click = "*" flask = "2.3.2" flask-compress = "^1.13" flask-socketio = "5.3.4" psutil = "*" pysocks = "*" requests = {extras = ["socks"], version = "*"} unidecode = "*" urllib3 = "^2.2.2" eventlet = "*" setuptools = ">=70.0.0" pynacl = "*" colorama = "*" gevent-websocket = "*" stem = "1.8.1" waitress = "^3.0.1" werkzeug = "3.0.6" packaging = ">=24" gevent = "^23.9.1" wheel = "^0.41.2" cffi = "^1.15.1" cython = "^3.0.2" qrcode = "^7.4.2" [tool.poetry.group.dev.dependencies] pytest = ">=7.2.0" [tool.poetry.scripts] onionshare-cli = 'onionshare_cli:main' [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" onionshare-2.6.3/cli/setup.py000066400000000000000000000047671475545702100162000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import setuptools with open(os.path.join("onionshare_cli", "resources", "version.txt")) as f: version = f.read().strip() setuptools.setup( name="onionshare-cli", version=version, long_description=( "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, " "making it accessible as a Tor onion service, and generating an unguessable web address so others can " "download files from you, or upload files to you. It does _not_ require setting up a separate server or " "using a third party file-sharing service." ), author="Micah Lee", author_email="micah@micahflee.com", maintainer="Micah Lee", maintainer_email="micah@micahflee.com", url="https://onionshare.org", license="GPLv3", keywords="onion, share, onionshare, tor, anonymous, web server", classifiers=[ "Programming Language :: Python :: 3", "Framework :: Flask", "Topic :: Communications :: File Sharing", "Topic :: Security :: Cryptography", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Intended Audience :: End Users/Desktop", "Operating System :: OS Independent", "Environment :: Web Environment", ], packages=[ "onionshare_cli", "onionshare_cli.web", ], package_data={ "onionshare_cli": [ "resources/*", "resources/static/*", "resources/static/css/*", "resources/static/img/*", "resources/static/js/*", "resources/templates/*", ] }, entry_points={ "console_scripts": [ "onionshare-cli = onionshare_cli:main", ], }, ) onionshare-2.6.3/cli/tests/000077500000000000000000000000001475545702100156125ustar00rootroot00000000000000onionshare-2.6.3/cli/tests/__init__.py000066400000000000000000000000001475545702100177110ustar00rootroot00000000000000onionshare-2.6.3/cli/tests/conftest.py000066400000000000000000000111761475545702100200170ustar00rootroot00000000000000import sys import os import shutil import tempfile import pytest from onionshare_cli import common, web # Force tests to look for resources in the source code tree sys.onionshare_dev_mode = True # Let OnionShare know the tests are running, to avoid colliding with settings files sys.onionshare_test_mode = True # The temporary directory for CLI tests test_temp_dir = None def pytest_addoption(parser): parser.addoption( "--runtor", action="store_true", default=False, help="run tor tests" ) def pytest_collection_modifyitems(config, items): if not config.getoption("--runtor"): # --runtor given in cli: do not skip tor tests skip_tor = pytest.mark.skip(reason="need --runtor option to run") for item in items: if "tor" in item.keywords: item.add_marker(skip_tor) @pytest.fixture def temp_dir(): """Creates a persistent temporary directory for the CLI tests to use""" global test_temp_dir if not test_temp_dir: test_temp_dir = tempfile.TemporaryDirectory() return test_temp_dir @pytest.fixture def temp_dir_1024(temp_dir): """Create a temporary directory that has a single file of a particular size (1024 bytes). """ new_temp_dir = tempfile.TemporaryDirectory(dir=temp_dir.name) tmp_file = tempfile.NamedTemporaryFile(dir=new_temp_dir.name) tmp_file.write(b"*" * 1024) return new_temp_dir @pytest.fixture def temp_dir_1024_delete(temp_dir): """Create a temporary directory that has a single file of a particular size (1024 bytes). The temporary directory (including the file inside) will be deleted after fixture usage. """ with tempfile.TemporaryDirectory(dir=temp_dir.name) as new_temp_dir: with open(os.path.join(new_temp_dir, "file"), "wb") as f: f.write(b"*" * 1024) yield new_temp_dir @pytest.fixture def temp_file_1024(temp_dir): """Create a temporary file of a particular size (1024 bytes).""" filename = os.path.join(temp_dir.name, "file") with open(filename, "wb") as f: f.write(b"*" * 1024) return filename @pytest.fixture def temp_file_1024_delete(temp_dir): """ Create a temporary file of a particular size (1024 bytes). The temporary file will be deleted after fixture usage. """ with tempfile.NamedTemporaryFile(dir=temp_dir.name, delete=False) as tmp_file: tmp_file.write(b"*" * 1024) tmp_file.flush() tmp_file.close() yield tmp_file @pytest.fixture(scope="session") def custom_zw(): zw = web.share_mode.ZipWriter( common.Common(), zip_filename=common.Common.random_string(4, 6), processed_size_callback=lambda _: "custom_callback", ) yield zw zw.close() os.remove(zw.zip_filename) @pytest.fixture(scope="session") def default_zw(): zw = web.share_mode.ZipWriter(common.Common()) yield zw zw.close() tmp_dir = os.path.dirname(zw.zip_filename) try: shutil.rmtree(tmp_dir, ignore_errors=True) except Exception: pass @pytest.fixture def locale_en(monkeypatch): monkeypatch.setattr("locale.getdefaultlocale", lambda: ("en_US", "UTF-8")) @pytest.fixture def locale_fr(monkeypatch): monkeypatch.setattr("locale.getdefaultlocale", lambda: ("fr_FR", "UTF-8")) @pytest.fixture def locale_invalid(monkeypatch): monkeypatch.setattr("locale.getdefaultlocale", lambda: ("xx_XX", "UTF-8")) @pytest.fixture def locale_ru(monkeypatch): monkeypatch.setattr("locale.getdefaultlocale", lambda: ("ru_RU", "UTF-8")) @pytest.fixture def platform_darwin(monkeypatch): monkeypatch.setattr("platform.system", lambda: "Darwin") @pytest.fixture # (scope="session") def platform_linux(monkeypatch): monkeypatch.setattr("platform.system", lambda: "Linux") @pytest.fixture def platform_windows(monkeypatch): monkeypatch.setattr("platform.system", lambda: "Windows") @pytest.fixture def sys_argv_sys_prefix(monkeypatch): monkeypatch.setattr("sys.argv", [sys.prefix]) @pytest.fixture def sys_frozen(monkeypatch): monkeypatch.setattr("sys.frozen", True, raising=False) @pytest.fixture def sys_meipass(monkeypatch): monkeypatch.setattr("sys._MEIPASS", os.path.expanduser("~"), raising=False) @pytest.fixture # (scope="session") def sys_onionshare_dev_mode(monkeypatch): monkeypatch.setattr("sys.onionshare_dev_mode", True, raising=False) @pytest.fixture def time_time_100(monkeypatch): monkeypatch.setattr("time.time", lambda: 100) @pytest.fixture def time_strftime(monkeypatch): monkeypatch.setattr("time.strftime", lambda _: "Jun 06 2013 11:05:00") @pytest.fixture def common_obj(): return common.Common() onionshare-2.6.3/cli/tests/pytest.ini000066400000000000000000000001341475545702100176410ustar00rootroot00000000000000[pytest] markers = gui: marks tests as a GUI test tor: marks tests as a Tor GUI testonionshare-2.6.3/cli/tests/test_cli.py000066400000000000000000000026631475545702100200010ustar00rootroot00000000000000import os import pytest from onionshare_cli import OnionShare from onionshare_cli.common import Common from onionshare_cli.mode_settings import ModeSettings class MyOnion: def __init__(self): self.auth_string = "TestHidServAuth" self.private_key = "" self.scheduled_key = None @staticmethod def start_onion_service( self, mode, mode_settings_obj, await_publication=True, save_scheduled_key=False ): return "test_service_id.onion" @pytest.fixture def onionshare_obj(): common = Common() return OnionShare(common, MyOnion()) @pytest.fixture def mode_settings_obj(): common = Common() return ModeSettings(common) class TestOnionShare: def test_init(self, onionshare_obj): assert onionshare_obj.hidserv_dir is None assert onionshare_obj.onion_host is None assert onionshare_obj.local_only is False def test_start_onion_service(self, onionshare_obj, mode_settings_obj): onionshare_obj.start_onion_service("share", mode_settings_obj) assert 17600 <= onionshare_obj.port <= 17650 assert onionshare_obj.onion_host == "test_service_id.onion" def test_start_onion_service_local_only(self, onionshare_obj, mode_settings_obj): onionshare_obj.local_only = True onionshare_obj.start_onion_service("share", mode_settings_obj) assert onionshare_obj.onion_host == "127.0.0.1:{}".format(onionshare_obj.port) onionshare-2.6.3/cli/tests/test_cli_common.py000066400000000000000000000221101475545702100213360ustar00rootroot00000000000000import contextlib import io import os import random import re import socket import sys import pytest PASSWORD_REGEX = re.compile(r"^([a-z]+)(-[a-z]+)?-([a-z]+)(-[a-z]+)?$") # TODO: Improve the Common tests to test it all as a single class class TestBuildPassword: @pytest.mark.parametrize( "test_input,expected", ( # VALID, two lowercase words, separated by a hyphen ("syrup-enzyme", True), ("caution-friday", True), # VALID, two lowercase words, with one hyphenated compound word ("drop-down-thimble", True), ("unmixed-yo-yo", True), # VALID, two lowercase hyphenated compound words, separated by hyphen ("yo-yo-drop-down", True), ("felt-tip-t-shirt", True), ("hello-world", True), # INVALID ("Upper-Case", False), ("digits-123", False), ("too-many-hyphens-", False), ("symbols-!@#$%", False), ), ) def test_build_password_regex(self, test_input, expected): """Test that `PASSWORD_REGEX` accounts for the following patterns There are a few hyphenated words in `wordlist.txt`: * drop-down * felt-tip * t-shirt * yo-yo These words cause a few extra potential password patterns: * word-word * hyphenated-word-word * word-hyphenated-word * hyphenated-word-hyphenated-word """ assert bool(PASSWORD_REGEX.match(test_input)) == expected def test_build_password_unique(self, common_obj, sys_onionshare_dev_mode): assert common_obj.build_password() != common_obj.build_password() class TestDirSize: def test_temp_dir_size(self, common_obj, temp_dir_1024_delete): """dir_size() should return the total size (in bytes) of all files in a particular directory. """ assert common_obj.dir_size(temp_dir_1024_delete) == 1024 class TestEstimatedTimeRemaining: @pytest.mark.parametrize( "test_input,expected", ( ((2, 676, 12), "8h14m16s"), ((14, 1049, 30), "1h26m15s"), ((21, 450, 1), "33m42s"), ((31, 1115, 80), "11m39s"), ((336, 989, 32), "2m12s"), ((603, 949, 38), "36s"), ((971, 1009, 83), "1s"), ), ) def test_estimated_time_remaining( self, common_obj, test_input, expected, time_time_100 ): assert common_obj.estimated_time_remaining(*test_input) == expected @pytest.mark.parametrize( "test_input", ( (10, 20, 100), # if `time_elapsed == 0` (0, 37, 99), # if `download_rate == 0` ), ) def test_raises_zero_division_error(self, common_obj, test_input, time_time_100): with pytest.raises(ZeroDivisionError): common_obj.estimated_time_remaining(*test_input) class TestFormatSeconds: @pytest.mark.parametrize( "test_input,expected", ( (0, "0s"), (26, "26s"), (60, "1m"), (947.35, "15m47s"), (1847, "30m47s"), (2193.94, "36m34s"), (3600, "1h"), (13426.83, "3h43m47s"), (16293, "4h31m33s"), (18392.14, "5h6m32s"), (86400, "1d"), (129674, "1d12h1m14s"), (56404.12, "15h40m4s"), ), ) def test_format_seconds(self, common_obj, test_input, expected): assert common_obj.format_seconds(test_input) == expected # TODO: test negative numbers? @pytest.mark.parametrize("test_input", ("string", lambda: None, [], {}, set())) def test_invalid_input_types(self, common_obj, test_input): with pytest.raises(TypeError): common_obj.format_seconds(test_input) class TestGetAvailablePort: @pytest.mark.parametrize( "port_min,port_max", ((random.randint(1024, 1500), random.randint(1800, 2048)) for _ in range(50)), ) def test_returns_an_open_port(self, common_obj, port_min, port_max): """get_available_port() should return an open port within the range""" port = common_obj.get_available_port(port_min, port_max) assert port_min <= port <= port_max with socket.socket() as tmpsock: tmpsock.bind(("127.0.0.1", port)) class TestGetPlatform: def test_darwin(self, platform_darwin, common_obj): assert common_obj.platform == "Darwin" def test_linux(self, platform_linux, common_obj): assert common_obj.platform == "Linux" def test_windows(self, platform_windows, common_obj): assert common_obj.platform == "Windows" class TestGetTorPaths: @pytest.mark.skipif(sys.platform != "darwin", reason="requires MacOS") def test_get_tor_paths_darwin( self, platform_darwin, common_obj, sys_frozen, sys_meipass ): base_path = os.path.dirname( os.path.dirname(os.path.dirname(common_obj.get_resource_path(""))) ) tor_path = os.path.join(base_path, "Resources", "Tor", "tor") tor_geo_ip_file_path = os.path.join(base_path, "Resources", "Tor", "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "Resources", "Tor", "geoip6") obfs4proxy_file_path = os.path.join(base_path, "Resources", "Tor", "obfs4proxy") meek_client_file_path = os.path.join( base_path, "Resources", "Tor", "meek-client" ) snowflake_file_path = os.path.join( base_path, "Resources", "Tor", "snowflake-client" ) assert common_obj.get_tor_paths() == ( tor_path, tor_geo_ip_file_path, tor_geo_ipv6_file_path, obfs4proxy_file_path, snowflake_file_path, meek_client_file_path, ) @pytest.mark.skipif(sys.platform != "linux", reason="requires Linux") def test_get_tor_paths_linux(self, platform_linux, common_obj): ( tor_path, tor_geo_ip_file_path, tor_geo_ipv6_file_path, _, # obfs4proxy is optional _, # snowflake-client is optional _, # meek-client is optional ) = common_obj.get_tor_paths() assert os.path.basename(tor_path) == "tor" assert ( tor_geo_ip_file_path == "/usr/share/tor/geoip" or tor_geo_ip_file_path == "/usr/local/share/tor/geoip" ) assert ( tor_geo_ipv6_file_path == "/usr/share/tor/geoip6" or tor_geo_ipv6_file_path == "/usr/local/share/tor/geoip6" ) @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows") def test_get_tor_paths_windows(self, platform_windows, common_obj, sys_frozen): base_path = os.path.join( os.path.dirname(os.path.dirname(common_obj.get_resource_path(""))), "resources", "tor", ) tor_path = os.path.join(os.path.join(base_path, "Tor"), "tor.exe") obfs4proxy_file_path = os.path.join( os.path.join(base_path, "Tor"), "obfs4proxy.exe" ) snowflake_file_path = os.path.join( os.path.join(base_path, "Tor"), "snowflake-client.exe" ) meek_client_file_path = os.path.join( os.path.join(base_path, "Tor"), "meek-client.exe" ) tor_geo_ip_file_path = os.path.join( os.path.join(os.path.join(base_path, "Data"), "Tor"), "geoip" ) tor_geo_ipv6_file_path = os.path.join( os.path.join(os.path.join(base_path, "Data"), "Tor"), "geoip6" ) assert common_obj.get_tor_paths() == ( tor_path, tor_geo_ip_file_path, tor_geo_ipv6_file_path, obfs4proxy_file_path, snowflake_file_path, meek_client_file_path, ) class TestHumanReadableFilesize: @pytest.mark.parametrize( "test_input,expected", ( (1024 ** 0, "1.0 B"), (1024 ** 1, "1.0 KiB"), (1024 ** 2, "1.0 MiB"), (1024 ** 3, "1.0 GiB"), (1024 ** 4, "1.0 TiB"), (1024 ** 5, "1.0 PiB"), (1024 ** 6, "1.0 EiB"), (1024 ** 7, "1.0 ZiB"), (1024 ** 8, "1.0 YiB"), ), ) def test_human_readable_filesize(self, common_obj, test_input, expected): assert common_obj.human_readable_filesize(test_input) == expected class TestLog: def test_output(self, common_obj, time_strftime): common_obj.verbose = True # From: https://stackoverflow.com/questions/1218933 with io.StringIO() as buf, contextlib.redirect_stdout(buf): common_obj.log("TestModule", "dummy_func") common_obj.log("TestModule", "dummy_func", "TEST_MSG") output = buf.getvalue() line_one, line_two, _ = output.split("\n") assert ( "[Jun 06 2013 11:05:00]" in line_one and "TestModule.dummy_func" in line_one ) assert ( "[Jun 06 2013 11:05:00]" in line_two and "TestModule.dummy_func" in line_two and "TEST_MSG" in line_two ) onionshare-2.6.3/cli/tests/test_cli_settings.py000066400000000000000000000137141475545702100217200ustar00rootroot00000000000000import json import os import tempfile import sys import pytest from onionshare_cli import common, settings @pytest.fixture def settings_obj(sys_onionshare_dev_mode, platform_linux): _common = common.Common() _common.version = "DUMMY_VERSION_1.2.3" return settings.Settings(_common) class TestSettings: def test_init(self, settings_obj): expected_settings = { "version": "DUMMY_VERSION_1.2.3", "connection_type": "bundled", "control_port_address": "127.0.0.1", "control_port_port": 9051, "socks_address": "127.0.0.1", "socks_port": 9050, "socket_file_path": "/var/run/tor/control", "auth_type": "no_auth", "auth_password": "", "use_autoupdate": True, "autoupdate_timestamp": None, "bridges_enabled": False, "bridges_type": "built-in", "bridges_builtin_pt": "obfs4", "bridges_moat": "", "bridges_custom": "", "bridges_builtin": {}, "persistent_tabs": [], "theme": 0, "auto_connect": False, } for key in settings_obj._settings: # Skip locale, it will not always default to the same thing if key != "locale": assert settings_obj._settings[key] == settings_obj.default_settings[key] assert settings_obj._settings[key] == expected_settings[key] def test_fill_in_defaults(self, settings_obj): del settings_obj._settings["version"] settings_obj.fill_in_defaults() assert settings_obj._settings["version"] == "DUMMY_VERSION_1.2.3" def test_load(self, temp_dir, settings_obj): custom_settings = { "version": "CUSTOM_VERSION", "socks_port": 9999, "use_stealth": True, } tmp_file, tmp_file_path = tempfile.mkstemp(dir=temp_dir.name) with open(tmp_file, "w") as f: json.dump(custom_settings, f) settings_obj.filename = tmp_file_path settings_obj.load() assert settings_obj._settings["version"] == "CUSTOM_VERSION" assert settings_obj._settings["socks_port"] == 9999 assert settings_obj._settings["use_stealth"] is True os.remove(tmp_file_path) assert os.path.exists(tmp_file_path) is False def test_save(self, monkeypatch, temp_dir, settings_obj): settings_filename = "default_settings.json" new_temp_dir = tempfile.mkdtemp(dir=temp_dir.name) settings_path = os.path.join(new_temp_dir, settings_filename) settings_obj.filename = settings_path settings_obj.save() with open(settings_path, "r") as f: settings = json.load(f) assert settings_obj._settings == settings os.remove(settings_path) assert os.path.exists(settings_path) is False def test_get(self, settings_obj): assert settings_obj.get("version") == "DUMMY_VERSION_1.2.3" assert settings_obj.get("connection_type") == "bundled" assert settings_obj.get("control_port_address") == "127.0.0.1" assert settings_obj.get("control_port_port") == 9051 assert settings_obj.get("socks_address") == "127.0.0.1" assert settings_obj.get("socks_port") == 9050 assert settings_obj.get("socket_file_path") == "/var/run/tor/control" assert settings_obj.get("auth_type") == "no_auth" assert settings_obj.get("auth_password") == "" assert settings_obj.get("use_autoupdate") is True assert settings_obj.get("autoupdate_timestamp") is None assert settings_obj.get("autoupdate_timestamp") is None assert settings_obj.get("bridges_enabled") is False assert settings_obj.get("bridges_type") == "built-in" assert settings_obj.get("bridges_builtin_pt") == "obfs4" assert settings_obj.get("bridges_moat") == "" assert settings_obj.get("bridges_custom") == "" def test_set_version(self, settings_obj): settings_obj.set("version", "CUSTOM_VERSION") assert settings_obj._settings["version"] == "CUSTOM_VERSION" def test_set_control_port_port(self, settings_obj): settings_obj.set("control_port_port", 999) assert settings_obj._settings["control_port_port"] == 999 settings_obj.set("control_port_port", "NON_INTEGER") assert settings_obj._settings["control_port_port"] == 9051 def test_set_socks_port(self, settings_obj): settings_obj.set("socks_port", 888) assert settings_obj._settings["socks_port"] == 888 settings_obj.set("socks_port", "NON_INTEGER") assert settings_obj._settings["socks_port"] == 9050 @pytest.mark.skipif(sys.platform != "darwin", reason="requires Darwin") def test_filename_darwin(self, monkeypatch, platform_darwin): obj = settings.Settings(common.Common()) assert obj.filename == os.path.expanduser( "~/Library/Application Support/OnionShare-testdata/onionshare.json" ) @pytest.mark.skipif(sys.platform != "linux", reason="requires Linux") def test_filename_linux(self, monkeypatch, platform_linux): obj = settings.Settings(common.Common()) assert obj.filename == os.path.expanduser( "~/.config/onionshare-testdata/onionshare.json" ) @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows") def test_filename_windows(self, monkeypatch, platform_windows): obj = settings.Settings(common.Common()) assert obj.filename == os.path.expanduser( "~\\AppData\\Roaming\\OnionShare-testdata\\onionshare.json" ) def test_set_custom_bridge(self, settings_obj): settings_obj.set( "bridges_custom", "Bridge 45.3.20.65:9050 21300AD88890A49C429A6CB9959CFD44490A8F6E", ) assert ( settings_obj._settings["bridges_custom"] == "Bridge 45.3.20.65:9050 21300AD88890A49C429A6CB9959CFD44490A8F6E" ) onionshare-2.6.3/cli/tests/test_cli_web.py000066400000000000000000000520061475545702100206320ustar00rootroot00000000000000import os import random import re import socket import subprocess import time import zipfile import tempfile import base64 import shutil import sys from io import BytesIO import pytest from contextlib import contextmanager from multiprocessing import Process from urllib.request import urlopen, Request from werkzeug.datastructures import Headers from werkzeug.exceptions import RequestedRangeNotSatisfiable from onionshare_cli.common import Common from onionshare_cli.web import Web from onionshare_cli.web.share_mode import parse_range_header from onionshare_cli.settings import Settings from onionshare_cli.mode_settings import ModeSettings import onionshare_cli.web.receive_mode # Stub requests.post, for receive mode webhook tests webhook_url = None webhook_data = None def requests_post_stub(url, data, timeout, proxies): global webhook_url, webhook_data webhook_url = url webhook_data = data onionshare_cli.web.receive_mode.requests.post = requests_post_stub DEFAULT_ZW_FILENAME_REGEX = re.compile(r"^onionshare_[a-z2-7]{6}.zip$") RANDOM_STR_REGEX = re.compile(r"^[a-z2-7]+$") def web_obj(temp_dir, common_obj, mode, num_files=0): """Creates a Web object, in either share mode or receive mode, ready for testing""" common_obj.settings = Settings(common_obj) mode_settings = ModeSettings(common_obj) web = Web(common_obj, False, mode_settings, mode) web.running = True web.cleanup_tempdirs == [] web.app.testing = True # Share mode if mode == "share": # Add files files = [] for _ in range(num_files): with tempfile.NamedTemporaryFile( delete=False, dir=temp_dir.name ) as tmp_file: tmp_file.write(b"*" * 1024) files.append(tmp_file.name) web.share_mode.set_file_info(files) # Receive mode else: pass return web class TestWeb: def test_share_mode(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) assert web.mode == "share" with web.app.test_client() as c: # Load / res = c.get("/") res.get_data() assert res.status_code == 200 # Download res = c.get("/download") res.get_data() assert res.status_code == 200 assert ( res.mimetype == "application/zip" or res.mimetype == "application/x-zip-compressed" ) def test_share_mode_autostop_sharing_on(self, temp_dir, common_obj, temp_file_1024): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", True) assert web.running is True with web.app.test_client() as c: # Download the first time res = c.get("/download") res.get_data() assert res.status_code == 200 assert ( res.mimetype == "application/zip" or res.mimetype == "application/x-zip-compressed" ) assert web.running is False def test_share_mode_autostop_sharing_off( self, temp_dir, common_obj, temp_file_1024 ): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) assert web.running is True with web.app.test_client() as c: # Download the first time res = c.get("/download") res.get_data() assert res.status_code == 200 assert ( res.mimetype == "application/zip" or res.mimetype == "application/x-zip-compressed" ) assert web.running is True def test_receive_mode(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") assert web.mode == "receive" with web.app.test_client() as c: # Load / with valid auth res = c.get( "/", ) res.get_data() assert res.status_code == 200 def test_receive_mode_webhook(self, temp_dir, common_obj): global webhook_url, webhook_data webhook_url = None webhook_data = None web = web_obj(temp_dir, common_obj, "receive") assert web.mode == "receive" web.settings.set("receive", "webhook_url", "http://127.0.0.1:1337/example") web.proxies = None assert ( web.settings.get("receive", "webhook_url") == "http://127.0.0.1:1337/example" ) with web.app.test_client() as c: res = c.get("/") res.get_data() assert res.status_code == 200 res = c.post( "/upload-ajax", buffered=True, content_type="multipart/form-data", data={"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg")}, ) res.get_data() assert res.status_code == 200 assert webhook_url == "http://127.0.0.1:1337/example" assert webhook_data == "1 file submitted to OnionShare" def test_receive_mode_message_no_files(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) with web.app.test_client() as c: res = c.post( "/upload-ajax", buffered=True, content_type="multipart/form-data", data={"text": "you know just sending an anonymous message"}, ) content = res.get_data() assert res.status_code == 200 assert b"Message submitted" in content # ~/OnionShare should have a folder for the date filenames = os.listdir(data_dir) assert len(filenames) == 1 data_dir_date = os.path.join(data_dir, filenames[0]) # The date folder should have a single message txt file, no folders filenames = os.listdir(data_dir_date) assert len(filenames) == 1 assert filenames[0].endswith("-message.txt") shutil.rmtree(data_dir) def test_receive_mode_message_and_files(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) with web.app.test_client() as c: res = c.post( "/upload-ajax", buffered=True, content_type="multipart/form-data", data={ "file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg"), "text": "you know just sending an anonymous message", }, ) content = res.get_data() assert res.status_code == 200 assert b"Message submitted, uploaded new_york.jpg" in content # Date folder should have a time folder with new_york.jpg, and a text message file data_dir_date = os.path.join(data_dir, os.listdir(data_dir)[0]) filenames = os.listdir(data_dir_date) assert len(filenames) == 2 time_str = filenames[0][0:12] assert time_str in filenames assert f"{time_str}-message.txt" in filenames data_dir_time = os.path.join(data_dir_date, time_str) assert os.path.isdir(data_dir_time) assert os.path.exists(os.path.join(data_dir_time, "new_york.jpg")) shutil.rmtree(data_dir) def test_receive_mode_files_no_message(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) with web.app.test_client() as c: res = c.post( "/upload-ajax", buffered=True, content_type="multipart/form-data", data={"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg")}, ) content = res.get_data() assert res.status_code == 200 assert b"Uploaded new_york.jpg" in content # Date folder should have just a time folder with new_york.jpg data_dir_date = os.path.join(data_dir, os.listdir(data_dir)[0]) filenames = os.listdir(data_dir_date) assert len(filenames) == 1 time_str = filenames[0][0:12] assert time_str in filenames assert f"{time_str}-message.txt" not in filenames data_dir_time = os.path.join(data_dir_date, time_str) assert os.path.isdir(data_dir_time) assert os.path.exists(os.path.join(data_dir_time, "new_york.jpg")) shutil.rmtree(data_dir) def test_receive_mode_no_message_no_files(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) with web.app.test_client() as c: res = c.post( "/upload-ajax", buffered=True, content_type="multipart/form-data", data={}, ) content = res.get_data() assert res.status_code == 200 assert b"Nothing submitted" in content # Date folder should be empty data_dir_date = os.path.join(data_dir, os.listdir(data_dir)[0]) filenames = os.listdir(data_dir_date) assert len(filenames) == 0 shutil.rmtree(data_dir) def test_public_mode_on(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") web.settings.set("general", "public", True) with web.app.test_client() as c: # Loading / should work without auth res = c.get("/") res.get_data() assert res.status_code == 200 def test_cleanup(self, common_obj, temp_dir_1024): web = web_obj(temp_dir_1024, common_obj, "share", 3) temp_dir = tempfile.TemporaryDirectory() web.cleanup_tempdirs = [temp_dir] web.cleanup() assert os.path.exists(temp_dir.name) is False assert web.cleanup_tempdirs == [] class TestZipWriterDefault: @pytest.mark.parametrize( "test_input", ( f"onionshare_{''.join(random.choice('abcdefghijklmnopqrstuvwxyz234567') for _ in range(6))}.zip" for _ in range(50) ), ) def test_default_zw_filename_regex(self, test_input): assert bool(DEFAULT_ZW_FILENAME_REGEX.match(test_input)) def test_zw_filename(self, default_zw): zw_filename = os.path.basename(default_zw.zip_filename) assert bool(DEFAULT_ZW_FILENAME_REGEX.match(zw_filename)) def test_zipfile_filename_matches_zipwriter_filename(self, default_zw): assert default_zw.z.filename == default_zw.zip_filename def test_zipfile_allow_zip64(self, default_zw): assert default_zw.z._allowZip64 is True def test_zipfile_mode(self, default_zw): assert default_zw.z.mode == "w" def test_callback(self, default_zw): assert default_zw.processed_size_callback(None) is None def test_add_file(self, default_zw, temp_file_1024_delete): default_zw.add_file(temp_file_1024_delete.name) zipfile_info = default_zw.z.getinfo( os.path.basename(temp_file_1024_delete.name) ) assert zipfile_info.compress_type == zipfile.ZIP_DEFLATED assert zipfile_info.file_size == 1024 def test_add_directory(self, temp_dir_1024_delete, default_zw): previous_size = default_zw._size # size before adding directory default_zw.add_dir(temp_dir_1024_delete) assert default_zw._size == previous_size + 1024 class TestZipWriterCustom: @pytest.mark.parametrize( "test_input", ( Common.random_string( random.randint(2, 50), random.choice((None, random.randint(2, 50))) ) for _ in range(50) ), ) def test_random_string_regex(self, test_input): assert bool(RANDOM_STR_REGEX.match(test_input)) def test_custom_filename(self, custom_zw): assert bool(RANDOM_STR_REGEX.match(custom_zw.zip_filename)) def test_custom_callback(self, custom_zw): assert custom_zw.processed_size_callback(None) == "custom_callback" def check_unsupported(cmd: str, args: list): cmd_args = [cmd] cmd_args.extend(args) skip = False try: subprocess.check_call(cmd_args) except Exception: skip = True return pytest.mark.skipif(skip, reason="Command {!r} not supported".format(cmd)) @contextmanager def live_server(web): s = socket.socket() s.bind(("localhost", 0)) port = s.getsockname()[1] s.close() def run(): web.app.run(host="127.0.0.1", port=port, debug=False) proc = Process(target=run) proc.start() url = "http://127.0.0.1:{}".format(port) req = Request(url) attempts = 20 while True: try: urlopen(req) break except Exception: attempts -= 1 if attempts > 0: time.sleep(0.5) else: raise yield url + "/download" proc.terminate() class TestRangeRequests: VALID_RANGES = [ (None, 500, [(0, 499)]), ("bytes=0", 500, [(0, 499)]), ("bytes=100", 500, [(100, 499)]), ("bytes=100-", 500, [(100, 499)]), # not in the RFC, but how curl sends ("bytes=0-99", 500, [(0, 99)]), ("bytes=0-599", 500, [(0, 499)]), ("bytes=0-0", 500, [(0, 0)]), ("bytes=-100", 500, [(400, 499)]), ("bytes=0-99,100-199", 500, [(0, 199)]), ("bytes=0-100,100-199", 500, [(0, 199)]), ("bytes=0-99,101-199", 500, [(0, 99), (101, 199)]), ("bytes=0-199,100-299", 500, [(0, 299)]), ("bytes=0-99,200-299", 500, [(0, 99), (200, 299)]), ] INVALID_RANGES = [ "bytes=200-100", "bytes=0-100,300-200", ] def test_parse_ranges(self): for case in self.VALID_RANGES: (header, target_size, expected) = case parsed = parse_range_header(header, target_size) assert parsed == expected, case for invalid in self.INVALID_RANGES: with pytest.raises(RequestedRangeNotSatisfiable): parse_range_header(invalid, 500) def test_headers(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) url = "/download" with web.app.test_client() as client: resp = client.get(url) assert resp.headers["ETag"].startswith('"sha256:') assert resp.headers["Accept-Ranges"] == "bytes" assert resp.headers.get("Last-Modified") is not None assert resp.headers.get("Content-Length") is not None assert "Accept-Encoding" in resp.headers["Vary"] def test_basic(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) url = "/download" with open(web.share_mode.download_filename, "rb") as f: contents = f.read() with web.app.test_client() as client: resp = client.get(url) assert resp.status_code == 200 assert resp.data == contents def test_reassemble(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) url = "/download" with open(web.share_mode.download_filename, "rb") as f: contents = f.read() with web.app.test_client() as client: headers = Headers() headers.extend({"Range": "bytes=0-10"}) resp = client.get(url, headers=headers) assert resp.status_code == 206 content_range = resp.headers["Content-Range"] assert content_range == "bytes {}-{}/{}".format( 0, 10, web.share_mode.download_filesize ) bytes_out = resp.data headers.update({"Range": "bytes=11-100000"}) resp = client.get(url, headers=headers) assert resp.status_code == 206 content_range = resp.headers["Content-Range"] assert content_range == "bytes {}-{}/{}".format( 11, web.share_mode.download_filesize - 1, web.share_mode.download_filesize, ) bytes_out += resp.data assert bytes_out == contents def test_mismatched_etags(self, temp_dir, common_obj): """RFC 7233 Section 3.2 The "If-Range" header field allows a client to "short-circuit" the second request. Informally, its meaning is as follows: if the representation is unchanged, send me the part(s) that I am requesting in Range; otherwise, send me the entire representation. """ web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) url = "/download" with open(web.share_mode.download_filename, "rb") as f: contents = f.read() with web.app.test_client() as client: headers = Headers() resp = client.get(url, headers=headers) assert resp.status_code == 200 headers.extend({"If-Range": "mismatched etag", "Range": "bytes=10-100"}) resp = client.get(url, headers=headers) assert resp.status_code == 200 assert resp.data == contents def test_if_unmodified_since(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) url = "/download" with web.app.test_client() as client: headers = Headers() resp = client.get(url, headers=headers) assert resp.status_code == 200 last_mod = resp.headers["Last-Modified"] headers.extend({"If-Unmodified-Since": last_mod}) resp = client.get(url, headers=headers) assert resp.status_code == 304 def test_firefox_like_behavior(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) url = "/download" with web.app.test_client() as client: headers = Headers() resp = client.get(url, headers=headers) assert resp.status_code == 200 # Firefox sends these with all range requests etag = resp.headers["ETag"] last_mod = resp.headers["Last-Modified"] # make a request that uses the full header set headers.extend( { "Range": "bytes=0-10", "If-Unmodified-Since": last_mod, "If-Range": etag, } ) resp = client.get(url, headers=headers) assert resp.status_code == 206 @pytest.mark.skipif(sys.platform != "linux", reason="requires Linux") @check_unsupported("curl", ["--version"]) def test_curl(self, temp_dir, tmpdir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) download = tmpdir.join("download") with live_server(web) as url: # Debugging help from `man curl`, on error 33 # 33 HTTP range error. The range "command" didn't work. subprocess.check_call( [ "curl", "--output", str(download), "--continue-at", "10", url, ] ) @pytest.mark.skipif(sys.platform != "linux", reason="requires Linux") @check_unsupported("wget", ["--version"]) def test_wget(self, temp_dir, tmpdir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) # wget needs a file to exist to continue download = tmpdir.join("download") download.write("x" * 10) with live_server(web) as url: subprocess.check_call( [ "wget", "--continue", "-O", str(download), url, ] ) @pytest.mark.skipif(sys.platform != "linux", reason="requires Linux") @check_unsupported("http", ["--version"]) def test_httpie(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "share", 3) web.settings.set("share", "autostop_sharing", False) with live_server(web) as url: subprocess.check_call(["http", url, "Range: bytes=10"]) onionshare-2.6.3/cli/tests/test_range_request.py000066400000000000000000000021671475545702100220750ustar00rootroot00000000000000import pytest from werkzeug.exceptions import RequestedRangeNotSatisfiable from onionshare_cli.web.share_mode import parse_range_header VALID_RANGES = [ (None, 500, [(0, 499)]), ("bytes=0", 500, [(0, 499)]), ("bytes=100", 500, [(100, 499)]), ("bytes=100-", 500, [(100, 499)]), # not in the RFC, but how curl sends ("bytes=0-99", 500, [(0, 99)]), ("bytes=0-599", 500, [(0, 499)]), ("bytes=0-0", 500, [(0, 0)]), ("bytes=-100", 500, [(400, 499)]), ("bytes=0-99,100-199", 500, [(0, 199)]), ("bytes=0-100,100-199", 500, [(0, 199)]), ("bytes=0-99,101-199", 500, [(0, 99), (101, 199)]), ("bytes=0-199,100-299", 500, [(0, 299)]), ("bytes=0-99,200-299", 500, [(0, 99), (200, 299)]), ] INVALID_RANGES = [ "bytes=200-100", "bytes=0-100,300-200", ] def test_parse_ranges(): for case in VALID_RANGES: (header, target_size, expected) = case parsed = parse_range_header(header, target_size) assert parsed == expected, case for invalid in INVALID_RANGES: with pytest.raises(RequestedRangeNotSatisfiable): parse_range_header(invalid, 500) onionshare-2.6.3/desktop/000077500000000000000000000000001475545702100153525ustar00rootroot00000000000000onionshare-2.6.3/desktop/README.md000066400000000000000000000050471475545702100166370ustar00rootroot00000000000000# OnionShare Desktop ## Building OnionShare Start by getting the source code and changing to the `desktop` folder: ```sh git clone https://github.com/onionshare/onionshare.git cd onionshare/desktop ``` Make sure you have Python 3 installed. If you're using Windows or macOS, install the latest version of 3.11 [from python.org](https://www.python.org/downloads/). For Windows, make sure to check the box to add python to the path on the first page of the installer. Make sure you have [poetry](https://python-poetry.org/) installed: ``` pip3 install poetry ``` And install the poetry dependencies: ```sh poetry install ``` **Windows users:** You may need to install [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/), making sure to check "Desktop development with C++", before `poetry install` will work properly. ### Get Tor **Linux users:** - On Debian/Debian-based distributions you may need the `libxcb-xinerama0` and `libxcb-cursor0` packages installed. - On Fedora/CentOS you may need the `libxcb-*` and `xcb-util-*` packages installed. **Windows users:** - Download and install [7-Zip (x64)](https://7-zip.org/). Add `C:\Program Files\7-Zip` to your path. - Download and install [gpg4win](https://gpg4win.org/). Add `C:\Program Files (x86)\GnuPG\bin` to your path. Download Tor Browser and extract the binaries for your platform. The platform must be `win64`, `macos`, or `linux-x86_64`. ```sh poetry run python ./scripts/get-tor.py [platform] ``` ### Compile dependencies Install Go. The simplest way to make sure everything works is to install Go by following [these instructions](https://golang.org/doc/install). Compile pluggable transports: **Windows users, in PowerShell:** ```powershell .\scripts\build-pt-obfs4proxy.ps1 .\scripts\build-pt-snowflake.ps1 .\scripts\build-pt-meek.ps1 ``` **macOS and Linux users:** ```sh ./scripts/build-pt-obfs4proxy.sh ./scripts/build-pt-snowflake.sh ./scripts/build-pt-meek.sh ``` ### Running OnionShare from the source code tree To run OnionShare from the source tree: ```sh poetry run onionshare poetry run onionshare --help poetry run onionshare -v poetry run onionshare -v --local-only ``` You can also run `onionshare-cli` from the source tree, and it will look for Tor binaries in `desktop/onionshare/resources/tor`. ```sh poetry run onionshare-cli --help ``` ## Running tests Run the tests: ```sh poetry run ./tests/run.sh ``` If you want to run tests while hiding the GUI, you must have the `xvfb` package installed, and then: ```sh xvfb-run poetry run ./tests/run.sh ``` onionshare-2.6.3/desktop/onionshare/000077500000000000000000000000001475545702100175175ustar00rootroot00000000000000onionshare-2.6.3/desktop/onionshare/__init__.py000066400000000000000000000217201475545702100216320ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from __future__ import division import os import sys import argparse import signal import json import psutil import getpass from PySide6 import QtCore, QtWidgets, QtGui from PySide6.QtCore import Slot, Qt from PySide6.QtGui import QPalette, QColor from onionshare_cli.common import Common from onionshare_cli.settings import Settings from .gui_common import GuiCommon from .widgets import Alert from .main_window import MainWindow class Application(QtWidgets.QApplication): """ This is Qt's QApplication class. It has been overridden to support threads and the quick keyboard shortcut. """ def __init__(self, common): if common.platform == "Linux" or common.platform == "BSD": self.setDesktopFileName("org.onionshare.OnionShare") self.setOrganizationDomain("org.onionshare.OnionShare") self.setOrganizationName("OnionShare") QtWidgets.QApplication.__init__(self, sys.argv) if common.platform == "Darwin" or common.platform == "Windows": self.setStyle("Fusion") # Check color mode on starting the app self.color_mode = self.get_color_mode(common) # Enable Dark Theme if self.color_mode == "dark": self.setDarkMode() else: self.setLightMode() self.installEventFilter(self) def eventFilter(self, obj, event): if ( event.type() == QtCore.QEvent.KeyPress and event.key() == QtCore.Qt.Key_Q and event.modifiers() == QtCore.Qt.ControlModifier ): self.quit() return False def is_dark_mode(self): baseColor = QtGui.QPalette().color(QtGui.QPalette.Base) if baseColor.name().lower() == "#ffffff": return False return True def setLightMode(self): light_palette = QPalette() light_palette.setColor(QPalette.Window, QColor(236, 236, 236)) light_palette.setColor(QPalette.WindowText, Qt.black) light_palette.setColor(QPalette.Base, Qt.white) light_palette.setColor(QPalette.AlternateBase, QColor(245, 245, 245)) light_palette.setColor(QPalette.ToolTipBase, Qt.white) light_palette.setColor(QPalette.ToolTipText, Qt.black) light_palette.setColor(QPalette.Text, Qt.black) light_palette.setColor(QPalette.Button, QColor(236, 236, 236)) light_palette.setColor(QPalette.ButtonText, Qt.black) light_palette.setColor(QPalette.BrightText, Qt.white) light_palette.setColor(QPalette.Link, QColor(0, 104, 218)) light_palette.setColor(QPalette.Highlight, QColor(179, 215, 255)) light_palette.setColor(QPalette.HighlightedText, Qt.black) light_palette.setColor(QPalette.Light, Qt.white) light_palette.setColor(QPalette.Midlight, QColor(245, 245, 245)) light_palette.setColor(QPalette.Dark, QColor(191, 191, 191)) light_palette.setColor(QPalette.Mid, QColor(169, 169, 169)) light_palette.setColor(QPalette.Shadow, Qt.black) self.setPalette(light_palette) def setDarkMode(self): dark_palette = QPalette() dark_palette.setColor(QPalette.Window, QColor(53, 53, 53)) dark_palette.setColor(QPalette.WindowText, Qt.white) dark_palette.setColor(QPalette.Base, QColor(25, 25, 25)) dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53)) dark_palette.setColor(QPalette.ToolTipBase, Qt.white) dark_palette.setColor(QPalette.ToolTipText, Qt.white) dark_palette.setColor(QPalette.Text, Qt.white) dark_palette.setColor(QPalette.Button, QColor(53, 53, 53)) dark_palette.setColor(QPalette.ButtonText, Qt.white) dark_palette.setColor(QPalette.BrightText, Qt.red) dark_palette.setColor(QPalette.Link, QColor(42, 130, 218)) dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218)) dark_palette.setColor(QPalette.HighlightedText, Qt.black) self.setPalette(dark_palette) self.setStyleSheet( "QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }" ) def get_color_mode(self, common): curr_settings = Settings(common) curr_settings.load() current_theme = curr_settings.get("theme") if current_theme == 1: return "light" elif current_theme == 2: return "dark" else: return "dark" if self.is_dark_mode() else "light" def main(): """ The main() function implements all of the logic that the GUI version of onionshare uses. """ common = Common() common.display_banner() # Start the Qt app global qtapp qtapp = Application(common) # Parse arguments parser = argparse.ArgumentParser( formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=48) ) parser.add_argument( "--local-only", action="store_true", dest="local_only", help="Don't use Tor (only for development)", ) parser.add_argument( "-v", "--verbose", action="store_true", dest="verbose", help="Log OnionShare errors to stdout, and web errors to disk", ) parser.add_argument( "--filenames", metavar="filenames", nargs="+", help="List of files or folders to share", ) args = parser.parse_args() filenames = args.filenames if filenames: for i in range(len(filenames)): filenames[i] = os.path.abspath(filenames[i]) local_only = bool(args.local_only) verbose = bool(args.verbose) # Verbose mode? common.verbose = verbose # Attach the GUI common parts to the common object common.gui = GuiCommon(common, qtapp, local_only) # Validation if filenames: valid = True for filename in filenames: if not os.path.isfile(filename) and not os.path.isdir(filename): Alert(common, f"{filename} is not a valid file.") valid = False if not os.access(filename, os.R_OK): Alert(common, f"{filename} is not a readable file.") valid = False if not valid: sys.exit() # Is there another onionshare-gui running? if os.path.exists(common.gui.lock_filename): with open(common.gui.lock_filename, "r") as f: existing_pid = int(f.read()) # Is this process actually still running? still_running = True if not psutil.pid_exists(existing_pid): still_running = False else: for proc in psutil.process_iter(["pid", "name", "username"]): if proc.pid == existing_pid: if ( proc.username() != getpass.getuser() or "onionshare" not in " ".join(proc.cmdline()).lower() ): still_running = False if still_running: print(f"Opening tab in existing OnionShare window (pid {existing_pid})") # Make an event for the existing OnionShare window if filenames: obj = {"type": "new_share_tab", "filenames": filenames} else: obj = {"type": "new_tab"} # Write that event to disk with open(common.gui.events_filename, "a") as f: f.write(json.dumps(obj) + "\n") return else: os.remove(common.gui.lock_filename) # Write the lock file with open(common.gui.lock_filename, "w") as f: f.write(f"{os.getpid()}\n") # Allow Ctrl-C to smoothly quit the program instead of throwing an exception def signal_handler(s, frame): print("\nCtrl-C pressed, quitting") if os.path.exists(common.gui.lock_filename): os.remove(common.gui.lock_filename) sys.exit(0) signal.signal(signal.SIGINT, signal_handler) # Launch the gui main_window = MainWindow(common, filenames) # If filenames were passed in, open them in a tab if filenames: main_window.tabs.new_share_tab(filenames) # Clean up when app quits def shutdown(): main_window.cleanup() os.remove(common.gui.lock_filename) qtapp.aboutToQuit.connect(shutdown) # All done sys.exit(qtapp.exec()) onionshare-2.6.3/desktop/onionshare/__main__.py000066400000000000000000000014461475545702100216160ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from . import main if __name__ == "__main__": main() onionshare-2.6.3/desktop/onionshare/connection_tab.py000066400000000000000000000626031475545702100230650ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2021 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import json import os from PySide6 import QtCore, QtWidgets, QtGui from onionshare_cli.censorship import ( CensorshipCircumvention, CensorshipCircumventionError, ) from onionshare_cli.meek import ( MeekNotRunning, MeekNotFound, ) from onionshare_cli.settings import Settings from . import strings from .gui_common import GuiCommon, ToggleCheckbox from .tor_connection import TorConnectionWidget from .update_checker import UpdateThread from .widgets import Alert class AutoConnectTab(QtWidgets.QWidget): """ Initial Tab that appears in the very beginning to ask user if should auto connect. """ close_this_tab = QtCore.Signal() tor_is_connected = QtCore.Signal() tor_is_disconnected = QtCore.Signal() def __init__(self, common, tab_id, status_bar, window, parent=None): super(AutoConnectTab, self).__init__() self.common = common self.common.log("AutoConnectTab", "__init__") self.status_bar = status_bar self.tab_id = tab_id self.window = window self.parent = parent # Was auto connected? self.curr_settings = Settings(common) self.curr_settings.load() self.auto_connect_enabled = self.curr_settings.get("auto_connect") # Rocket ship animation images self.anim_stars = AnimStars(self, self.window) self.anim_ship = AnimShip(self, self.window) self.anim_smoke = AnimSmoke(self, self.window) # Onionshare logo self.image_label = QtWidgets.QLabel() self.image_label.setPixmap( QtGui.QPixmap.fromImage( QtGui.QImage( GuiCommon.get_resource_path( os.path.join( "images", f"{common.gui.color_mode}_logo_text_bg.png" ) ) ) ) ) self.image_label.setFixedSize(322, 65) image_layout = QtWidgets.QVBoxLayout() image_layout.addWidget(self.image_label) self.image = QtWidgets.QWidget() self.image.setLayout(image_layout) # First launch widget self.first_launch_widget = AutoConnectFirstLaunchWidget( self.common, self.curr_settings ) self.first_launch_widget.toggle_auto_connect.connect(self.toggle_auto_connect) self.first_launch_widget.connect_clicked.connect( self.first_launch_widget_connect_clicked ) self.first_launch_widget.open_tor_settings.connect(self.open_tor_settings) self.first_launch_widget.show() # Use bridge widget self.use_bridge_widget = AutoConnectUseBridgeWidget(self.common) self.use_bridge_widget.connect_clicked.connect(self.use_bridge_connect_clicked) self.use_bridge_widget.try_again_clicked.connect( self.first_launch_widget_connect_clicked ) self.use_bridge_widget.open_tor_settings.connect(self.open_tor_settings) self.use_bridge_widget.hide() # Tor connection widget self.tor_con = TorConnectionWidget(self.common, self.status_bar) self.tor_con.success.connect(self.tor_con_success) self.tor_con.fail.connect(self.tor_con_fail) self.tor_con.update_progress.connect(self.anim_stars.update) self.tor_con.update_progress.connect(self.anim_ship.update) self.tor_con.update_progress.connect(self.anim_smoke.update) self.tor_con.hide() # Layout content_layout = QtWidgets.QVBoxLayout() content_layout.addStretch() content_layout.addWidget(self.image) content_layout.addWidget(self.first_launch_widget) content_layout.addWidget(self.use_bridge_widget) content_layout.addWidget(self.tor_con) content_layout.addStretch() content_layout.setAlignment(QtCore.Qt.AlignCenter) content_widget = QtWidgets.QWidget() content_widget.setLayout(content_layout) self.layout = QtWidgets.QHBoxLayout() self.layout.addWidget(content_widget) self.layout.addStretch() self.setLayout(self.layout) def check_autoconnect(self): """ After rendering, check if autoconnect was clicked, then start connecting """ self.common.log("AutoConnectTab", "autoconnect_checking") if self.auto_connect_enabled: self.first_launch_widget.enable_autoconnect_checkbox.setChecked(True) self.first_launch_widget_connect_clicked() def toggle_auto_connect(self): """ Auto connect checkbox clicked """ self.common.log("AutoConnectTab", "autoconnect_checkbox_clicked") self.curr_settings.set( "auto_connect", self.first_launch_widget.enable_autoconnect_checkbox.isChecked(), ) self.curr_settings.save() def open_tor_settings(self): self.parent.open_settings_tab(from_autoconnect=True, active_tab="tor") def first_launch_widget_connect_clicked(self): """ Connect button in first launch widget clicked. Try to connect to tor. """ self.common.log("AutoConnectTab", "first_launch_widget_connect_clicked") self.first_launch_widget.hide_buttons() self.tor_con.show() self.tor_con.start(self.curr_settings) def _got_bridges(self): self.use_bridge_widget.progress.hide() self.use_bridge_widget.progress_label.hide() # Try and connect again self.common.log( "AutoConnectTab", "_got_bridges", "Got bridges. Trying to reconnect to Tor", ) self.tor_con.show() self.tor_con.start(self.curr_settings) def _got_no_bridges(self): # If we got no bridges, even after trying the default bridges # provided by the Censorship API, try connecting again using # our built-in obfs4 bridges self.curr_settings.set("bridges_type", "built-in") self.curr_settings.set("bridges_builtin_pt", "obfs4") self.curr_settings.set("bridges_enabled", True) self.curr_settings.save() self._got_bridges() def _censorship_progress_update(self, progress, summary): self.use_bridge_widget.progress.setValue(int(progress)) self.use_bridge_widget.progress_label.setText( f"{strings._('gui_autoconnect_circumventing_censorship')}
    {summary}" ) def network_connection_error(self): """ Display an error if there simply seems no network connection. """ self.use_bridge_widget.connection_status_label.setText( strings._("gui_autoconnect_failed_to_connect_to_tor") ) self.use_bridge_widget.progress.hide() self.use_bridge_widget.progress_label.hide() self.use_bridge_widget.error_label.show() self.use_bridge_widget.country_combobox.setEnabled(True) self.use_bridge_widget.show_buttons() self.use_bridge_widget.show() def use_bridge_connect_clicked(self): """ Connect button in use bridge widget clicked. """ self.common.log( "AutoConnectTab", "use_bridge_connect_clicked", "Trying to automatically obtain bridges", ) self.use_bridge_widget.hide_buttons() self.use_bridge_widget.progress.show() self.use_bridge_widget.progress_label.show() if self.use_bridge_widget.detect_automatic_radio.isChecked(): country = False else: country = self.use_bridge_widget.country_combobox.currentData().lower() self._censorship_progress_update( 50, strings._("gui_autoconnect_circumventing_censorship_starting_meek") ) try: self.common.gui.meek.start() self.censorship_circumvention = CensorshipCircumvention( self.common, self.common.gui.meek ) self._censorship_progress_update( 75, strings._( "gui_autoconnect_circumventing_censorship_requesting_bridges" ), ) bridge_settings = self.censorship_circumvention.request_settings( country=country ) if not bridge_settings: # Fall back to trying the default bridges from the API self.common.log( "AutoConnectTab", "use_bridge_connect_clicked", "Falling back to trying default bridges provided by the Censorship Circumvention API", ) bridge_settings = ( self.censorship_circumvention.request_default_bridges() ) self.common.gui.meek.cleanup() if bridge_settings and self.censorship_circumvention.save_settings( self.curr_settings, bridge_settings ): self._censorship_progress_update( 100, strings._("gui_autoconnect_circumventing_censorship_got_bridges"), ) self._got_bridges() else: self._got_no_bridges() except ( MeekNotRunning, MeekNotFound, ) as e: self._got_no_bridges() except CensorshipCircumventionError as e: self.common.log( "AutoConnectTab", "use_bridge_connect_clicked", "Request to the Tor Censorship Circumvention API failed. No network connection?", ) self.network_connection_error() def check_for_updates(self): """ Check for OnionShare updates in a new thread, if enabled. """ if self.common.platform == "Windows" or self.common.platform == "Darwin": if self.common.settings.get("use_autoupdate"): def update_available(update_url, installed_version, latest_version): Alert( self.common, strings._("update_available").format( update_url, installed_version, latest_version ), ) self.update_thread = UpdateThread(self.common, self.common.gui.onion) self.update_thread.update_available.connect(update_available) self.update_thread.start() def tor_con_success(self): """ Finished testing tor connection. """ self.tor_con.hide() self.first_launch_widget.show_buttons() self.use_bridge_widget.show_buttons() self.use_bridge_widget.progress.hide() self.use_bridge_widget.progress_label.hide() if self.common.gui.onion.is_authenticated() and not self.tor_con.wasCanceled(): # Tell the tabs that Tor is connected self.tor_is_connected.emit() # After connecting to Tor, check for updates self.check_for_updates() # Close the tab self.close_this_tab.emit() def tor_con_fail(self, msg): """ Finished testing tor connection. """ self.tor_con.hide() # If there is a message, update the text of the bridge widget if msg: self.use_bridge_widget.connection_error_message.setText(msg) # If we're on first launch, check if wasCanceled # If cancelled, stay in first launch widget and show buttons # Else, switch to use bridge if self.first_launch_widget.isVisible(): if self.tor_con.wasCanceled(): self.first_launch_widget.show_buttons() else: self.first_launch_widget.show_buttons() self.first_launch_widget.hide() self.use_bridge_widget.show() else: self.use_bridge_widget.show_buttons() def reload_settings(self): """ Reload the latest Tor settings, and reset to show the first-launch widget if it had been hidden. """ self.curr_settings.load() self.auto_connect_enabled = self.curr_settings.get("auto_connect") self.first_launch_widget.enable_autoconnect_checkbox.setChecked( self.auto_connect_enabled ) self.use_bridge_widget.hide() self.first_launch_widget.show_buttons() self.first_launch_widget.show() class Anim(QtWidgets.QLabel): """ Rocket ship animation base class """ force_update = QtCore.Signal(int) def __init__(self, parent, window, w, h, filename): super(Anim, self).__init__(parent=parent) self.window = window self.window.window_resized.connect(self.update_same_percent) self.w = w self.h = h self.percent = 0 self.used_percentages = [] self.setPixmap( QtGui.QPixmap.fromImage( QtGui.QImage( GuiCommon.get_resource_path(os.path.join("images", filename)) ) ) ) self.setFixedSize(self.w, self.h) self.update(0) self.force_update.connect(self.update) def update_same_percent(self): self.update(self.percent) def update(self, percent): self.percent = percent self.move() self.setGeometry(int(self.x), int(self.y), int(self.w), int(self.h)) def move(self): # Implement in child pass class AnimStars(Anim): """ Rocket ship animation part: stars """ def __init__(self, parent, window): super(AnimStars, self).__init__( parent, window, 740, 629, "tor-connect-stars.png" ) def move(self): self.x = self.window.width() - self.w self.y = 0 # Stars don't move until 10%, then move down if self.percent >= 10: self.y += self.percent * 6.6 class AnimShip(Anim): """ Rocket ship animation part: ship """ def __init__(self, parent, window): super(AnimShip, self).__init__(parent, window, 239, 545, "tor-connect-ship.png") def move(self): self.x = self.window.width() - self.w - 150 self.y = self.window.height() - self.h - 40 # Ship moves up self.y -= self.percent * 6.6 class AnimSmoke(Anim): """ Rocket ship animation part: smoke """ def __init__(self, parent, window): super(AnimSmoke, self).__init__( parent, window, 522, 158, "tor-connect-smoke.png" ) def move(self): self.x = self.window.width() - self.w self.y = self.window.height() - self.h + 50 # Smoke moves up until 50%, then moves down self.y -= self.percent * 6.6 if self.percent >= 50: self.y += self.percent * 6.7 class AutoConnectFirstLaunchWidget(QtWidgets.QWidget): """ When you first launch OnionShare, this is the widget that is displayed """ toggle_auto_connect = QtCore.Signal() connect_clicked = QtCore.Signal() open_tor_settings = QtCore.Signal() def __init__(self, common, settings): super(AutoConnectFirstLaunchWidget, self).__init__() self.common = common self.common.log("AutoConnectFirstLaunchWidget", "__init__") self.settings = settings # Description and checkbox description_label = QtWidgets.QLabel(strings._("gui_autoconnect_description")) self.enable_autoconnect_checkbox = ToggleCheckbox( strings._("gui_enable_autoconnect_checkbox") ) self.enable_autoconnect_checkbox.setChecked(self.settings.get("auto_connect")) self.enable_autoconnect_checkbox.clicked.connect(self._toggle_auto_connect) self.enable_autoconnect_checkbox.setFixedWidth(400) self.enable_autoconnect_checkbox.setStyleSheet( common.gui.css["enable_autoconnect"] ) description_layout = QtWidgets.QVBoxLayout() description_layout.addWidget(description_label) description_layout.addWidget(self.enable_autoconnect_checkbox) description_widget = QtWidgets.QWidget() description_widget.setLayout(description_layout) # Buttons self.connect_button = QtWidgets.QPushButton(strings._("gui_autoconnect_start")) self.connect_button.clicked.connect(self._connect_clicked) self.connect_button.setFixedWidth(150) self.connect_button.setStyleSheet(common.gui.css["autoconnect_start_button"]) self.configure_button = QtWidgets.QPushButton( strings._("gui_autoconnect_configure") ) self.configure_button.clicked.connect(self._open_tor_settings) self.configure_button.setFlat(True) self.configure_button.setStyleSheet( common.gui.css["autoconnect_configure_button"] ) cta_layout = QtWidgets.QHBoxLayout() cta_layout.addWidget(self.connect_button) cta_layout.addWidget(self.configure_button) cta_widget = QtWidgets.QWidget() cta_widget.setLayout(cta_layout) # Layout layout = QtWidgets.QVBoxLayout() layout.addWidget(description_widget) layout.addWidget(cta_widget) self.setLayout(layout) def hide_buttons(self): self.connect_button.hide() self.configure_button.hide() def show_buttons(self): self.connect_button.show() self.configure_button.show() def _toggle_auto_connect(self): self.toggle_auto_connect.emit() def _connect_clicked(self): self.connect_clicked.emit() def _open_tor_settings(self): self.open_tor_settings.emit() class AutoConnectUseBridgeWidget(QtWidgets.QWidget): """ If connecting fails, this is the widget that helps the user bypass censorship """ connect_clicked = QtCore.Signal() try_again_clicked = QtCore.Signal() open_tor_settings = QtCore.Signal() def __init__(self, common): super(AutoConnectUseBridgeWidget, self).__init__() self.common = common self.common.log("AutoConnectUseBridgeWidget", "__init__") # Heading label when we fail to connect to Tor. self.connection_status_label = QtWidgets.QLabel( strings._("gui_autoconnect_failed_to_connect_to_tor") ) self.connection_status_label.setTextFormat(QtCore.Qt.RichText) self.connection_status_label.setStyleSheet( common.gui.css["autoconnect_failed_to_connect_label"] ) # Tor connection error message self.connection_error_message = QtWidgets.QLabel( strings._("gui_autoconnect_connection_error_msg") ) self.connection_error_message.setTextFormat(QtCore.Qt.RichText) self.connection_error_message.setWordWrap(True) self.connection_error_message.setContentsMargins(0, 0, 0, 10) # Description self.description_label = QtWidgets.QLabel( strings._("gui_autoconnect_bridge_description") ) self.description_label.setTextFormat(QtCore.Qt.RichText) self.description_label.setWordWrap(True) self.description_label.setContentsMargins(0, 0, 0, 20) # Detection preference self.use_bridge = True self.no_bridge = QtWidgets.QRadioButton( strings._("gui_autoconnect_no_bridge") ) self.no_bridge.toggled.connect(self._toggle_no_bridge) self.detect_automatic_radio = QtWidgets.QRadioButton( strings._("gui_autoconnect_bridge_detect_automatic") ) self.detect_automatic_radio.toggled.connect(self._detect_automatic_toggled) self.detect_manual_radio = QtWidgets.QRadioButton( strings._("gui_autoconnect_bridge_detect_manual") ) self.detect_manual_radio.toggled.connect(self._detect_manual_toggled) detect_layout = QtWidgets.QVBoxLayout() detect_layout.addWidget(self.no_bridge) detect_layout.addWidget(self.detect_automatic_radio) detect_layout.addWidget(self.detect_manual_radio) bridge_setting_options = QtWidgets.QGroupBox( strings._("gui_autoconnect_bridge_setting_options") ) bridge_setting_options.setLayout(detect_layout) bridge_setting_options.setFlat(True) bridge_setting_options.setStyleSheet( common.gui.css["autoconnect_bridge_setting_options"] ) # Country list locale = self.common.settings.get("locale") if not locale: locale = "en" with open( GuiCommon.get_resource_path(os.path.join("countries", f"{locale}.json")) ) as f: countries = json.loads(f.read()) self.country_combobox = QtWidgets.QComboBox() self.country_combobox.setStyleSheet( common.gui.css["autoconnect_countries_combobox"] ) self.country_combobox.setIconSize(QtCore.QSize(26, 20)) for country_code in countries: icon = QtGui.QIcon( GuiCommon.get_resource_path(os.path.join("images", "countries", f"{country_code.lower()}.png")) ) self.country_combobox.addItem(icon, countries[country_code], country_code) # Task label self.task_label = QtWidgets.QLabel() self.task_label.setStyleSheet(common.gui.css["autoconnect_task_label"]) self.task_label.setAlignment(QtCore.Qt.AlignCenter) self.task_label.hide() # Buttons self.connect_button = QtWidgets.QPushButton( strings._("gui_autoconnect_start") ) self.connect_button.clicked.connect(self._connect_clicked) self.connect_button.setFixedWidth(150) self.connect_button.setStyleSheet(common.gui.css["autoconnect_start_button"]) self.configure_button = QtWidgets.QPushButton( strings._("gui_autoconnect_configure") ) self.configure_button.clicked.connect(self._open_tor_settings) self.configure_button.setFlat(True) self.configure_button.setStyleSheet( common.gui.css["autoconnect_configure_button"] ) # Error label self.error_label = QtWidgets.QLabel( strings._("gui_autoconnect_could_not_connect_to_tor_api") ) self.error_label.setStyleSheet(self.common.gui.css["tor_settings_error"]) self.error_label.setWordWrap(True) self.error_label.hide() self.progress = QtWidgets.QProgressBar() self.progress.setRange(0, 100) self.progress_label = QtWidgets.QLabel( strings._("gui_autoconnect_circumventing_censorship") ) self.progress_label.setAlignment(QtCore.Qt.AlignHCenter) self.progress.hide() self.progress_label.hide() cta_layout = QtWidgets.QHBoxLayout() cta_layout.addWidget(self.connect_button) cta_layout.addWidget(self.configure_button) cta_layout.addStretch() cta_widget = QtWidgets.QWidget() cta_widget.setLayout(cta_layout) # Layout layout = QtWidgets.QVBoxLayout() layout.addWidget(self.connection_status_label) layout.addWidget(self.connection_error_message) layout.addWidget(self.description_label) layout.addWidget(bridge_setting_options) layout.addWidget(self.country_combobox) layout.addWidget(self.task_label) layout.addWidget(cta_widget) layout.addWidget(self.progress) layout.addWidget(self.progress_label) layout.addWidget(self.error_label) self.setLayout(layout) self.detect_automatic_radio.setChecked(True) def hide_buttons(self): self.connect_button.hide() self.configure_button.hide() self.connection_error_message.hide() self.description_label.hide() self.error_label.hide() self.no_bridge.hide() self.detect_automatic_radio.hide() self.detect_manual_radio.hide() def show_buttons(self): self.connect_button.show() self.connection_error_message.show() self.description_label.show() self.configure_button.show() self.no_bridge.show() self.detect_automatic_radio.show() self.detect_manual_radio.show() def _toggle_no_bridge(self): self.use_bridge = not self.use_bridge def _detect_automatic_toggled(self): self.country_combobox.setEnabled(False) self.country_combobox.hide() def _detect_manual_toggled(self): self.country_combobox.setEnabled(True) self.country_combobox.show() def _connect_clicked(self): self.country_combobox.setEnabled(False) self.hide_buttons() self.connection_status_label.setText( strings._("gui_autoconnect_trying_to_connect_to_tor") ) print(self.use_bridge) if not self.use_bridge: self.try_again_clicked.emit() else: self.connect_clicked.emit() def _open_tor_settings(self): self.open_tor_settings.emit() onionshare-2.6.3/desktop/onionshare/gui_common.py000066400000000000000000000556731475545702100222450ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import importlib.resources as importlib_resources import os import shutil from PySide6 import QtCore, QtWidgets, QtGui from . import strings from onionshare_cli.onion import ( Onion, TorErrorInvalidSetting, TorErrorAutomatic, TorErrorSocketPort, TorErrorSocketFile, TorErrorMissingPassword, TorErrorUnreadableCookieFile, TorErrorAuthError, TorErrorProtocolError, BundledTorTimeout, BundledTorBroken, TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, ) from onionshare_cli.meek import Meek from onionshare_cli.web.web import WaitressException class GuiCommon: """ The shared code for all of the OnionShare GUI. """ MODE_SHARE = "share" MODE_RECEIVE = "receive" MODE_WEBSITE = "website" MODE_CHAT = "chat" def __init__(self, common, qtapp, local_only): self.common = common self.qtapp = qtapp self.local_only = local_only # Are we running in a flatpak package? self.is_flatpak = os.path.exists("/.flatpak-info") # Load settings self.common.load_settings() # Load strings strings.load_strings(self.common, self.get_resource_path("locale")) # Start the Onion self.onion = Onion(common, get_tor_paths=self.get_tor_paths) # Lock filename self.lock_filename = os.path.join(self.common.build_data_dir(), "lock") # Events filenames self.events_dir = os.path.join(self.common.build_data_dir(), "events") if not os.path.exists(self.events_dir): os.makedirs(self.events_dir, 0o700, True) self.events_filename = os.path.join(self.events_dir, "events") # Instantiate Meek, which is used to bypass censorship self.meek = Meek(self.common, get_tor_paths=self.get_tor_paths) self.css = self.get_css(qtapp.color_mode) self.color_mode = qtapp.color_mode def get_css(self, color_mode): header_color = "#4E064F" # purple in light title_color = "#333333" # dark gray color in main window stop_button_color = "#d0011b" # red button color for stopping server new_tab_button_background = "#ffffff" new_tab_button_border = "#efeff0" new_tab_button_text_color = "#4e0d4e" downloads_uploads_progress_bar_border_color = "#4E064F" downloads_uploads_progress_bar_chunk_color = "#4E064F" share_zip_progess_bar_border_color = "#4E064F" share_zip_progess_bar_chunk_color = "#4E064F" history_background_color = "#ffffff" history_label_color = "#000000" settings_error_color = "#FF0000" if color_mode == "dark": header_color = "#F2F2F2" title_color = "#F2F2F2" stop_button_color = "#C32F2F" new_tab_button_background = "#5F5F5F" new_tab_button_border = "#878787" new_tab_button_text_color = "#FFFFFF" share_zip_progess_bar_border_color = "#F2F2F2" history_background_color = "#191919" history_label_color = "#ffffff" settings_error_color = "#FF9999" return { # OnionShareGui styles "tab_widget": """ QTabBar::tab { width: 170px; height: 30px; } """, "tab_widget_new_tab_button": """ QPushButton { font-weight: bold; font-size: 20px; }""", "settings_subtab_bar": """ QTabBar::tab { background: transparent; } QTabBar::tab:selected { border-bottom: 3px solid; border-color: #4E064F; padding: 3px }""", "mode_new_tab_button": """ QPushButton { font-weight: bold; font-size: 30px; color: #601f61; }""", "mode_header_label": """ QLabel { color: """ + header_color + """; font-size: 48px; margin-bottom: 16px; }""", "settings_button": """ QPushButton { border: 0; border-radius: 0; }""", "server_status_indicator_label": """ QLabel { font-style: italic; color: #666666; padding: 2px; }""", "status_bar": """ QStatusBar { font-style: italic; color: #666666; } QStatusBar::item { border: 0px; }""", "autoconnect_start_button": """ QPushButton { background-color: #5fa416; color: #ffffff; padding: 10px; border: 0; border-radius: 5px; }""", "autoconnect_configure_button": """ QPushButton { padding: 9px 29px; color: #3f7fcf; text-align: left; }""", "enable_autoconnect": """ QCheckBox { margin-top: 30px; background: #FCFCFC; color: #000000; border: 1px solid #DDDBDA; border-radius: 8px; padding: 24px 16px; } QCheckBox::indicator { width: 0; height: 0; }""", "autoconnect_countries_combobox": """ QComboBox { padding: 10px; font-size: 16px; margin-left: 32px; } QComboBox:disabled { color: #666666; } """, "autoconnect_task_label": """ QLabel { font-weight: bold; } """, "autoconnect_failed_to_connect_label": """ QLabel { font-size: 18px; font-weight: bold; }""", "autoconnect_bridge_setting_options": """ QGroupBox { border: 0; border-color: transparent; background-color: transparent; font-weight: bold; margin-top: 16px; } QGroupBox::title { subcontrol-origin: margin; }""", # Common styles between modes and their child widgets "mode_settings_toggle_advanced": """ QPushButton { color: #3f7fcf; text-align: left; } """, "mode_info_label": """ QLabel { font-size: 12px; color: #666666; } """, "server_status_url": """ QLabel { background-color: #ffffff; color: #000000; padding: 10px; border: 1px solid #666666; font-size: 12px; } """, "server_status_url_buttons": """ QPushButton { padding: 4px 8px; text-align: center; } """, "server_status_button_stopped": """ QPushButton { background-color: #5fa416; color: #ffffff; padding: 10px 30px 10px 30px; border: 0; border-radius: 5px; }""", "server_status_button_working": """ QPushButton { background-color: #4c8211; color: #ffffff; padding: 10px 30px 10px 30px; border: 0; border-radius: 5px; font-style: italic; }""", "server_status_button_started": """ QPushButton { background-color: """ + stop_button_color + """; color: #ffffff; padding: 10px 30px 10px 30px; border: 0; border-radius: 5px; }""", "downloads_uploads_not_empty": """ QWidget{ background-color: """ + history_background_color + """; }""", "downloads_uploads_empty": """ QWidget { background-color: """ + history_background_color + """; border: 1px solid #999999; } QWidget QLabel { background-color: none; border: 0px; } """, "downloads_uploads_empty_text": """ QLabel { color: #999999; }""", "downloads_uploads_label": """ QLabel { font-weight: bold; font-size 14px; text-align: center; background-color: none; border: none; }""", "downloads_uploads_clear": """ QPushButton { color: #3f7fcf; } """, "download_uploads_indicator": """ QLabel { color: #ffffff; background-color: #f44449; font-weight: bold; font-size: 10px; padding: 2px; border-radius: 7px; text-align: center; }""", "downloads_uploads_progress_bar": """ QProgressBar { border: 1px solid """ + downloads_uploads_progress_bar_border_color + """; background-color: #ffffff !important; text-align: center; color: #9b9b9b; font-size: 14px; } QProgressBar::chunk { background-color: """ + downloads_uploads_progress_bar_chunk_color + """; width: 10px; }""", "history_default_label": """ QLabel { color: """ + history_label_color + """; }""", "history_individual_file_timestamp_label": """ QLabel { color: #666666; }""", "history_individual_file_status_code_label_2xx": """ QLabel { color: #008800; }""", "history_individual_file_status_code_label_4xx": """ QLabel { color: #cc0000; }""", "tor_not_connected_label": """ QLabel { font-size: 16px; font-style: italic; }""", # New tab "new_tab_button_image": """ QLabel { padding: 30px; text-align: center; } """, "new_tab_button_text": """ QLabel { border: 1px solid """ + new_tab_button_border + """; border-radius: 4px; background-color: """ + new_tab_button_background + """; text-align: center; color: """ + new_tab_button_text_color + """; } """, "new_tab_title_text": """ QLabel { text-align: center; color: """ + title_color + """; font-size: 25px; } """, # Share mode and child widget styles "share_delete_all_files_button": """ QPushButton { color: #3f7fcf; } """, "share_zip_progess_bar": """ QProgressBar { border: 1px solid """ + share_zip_progess_bar_border_color + """; background-color: #ffffff !important; text-align: center; color: #9b9b9b; } QProgressBar::chunk { border: 0px; background-color: """ + share_zip_progess_bar_chunk_color + """; width: 10px; }""", "share_filesize_warning": """ QLabel { padding: 10px 0; font-weight: bold; color: """ + title_color + """; } """, "share_file_selection_drop_here_header_label": """ QLabel { color: """ + header_color + """; font-size: 48px; }""", "share_file_selection_drop_here_label": """ QLabel { color: #666666; }""", "share_file_selection_drop_count_label": """ QLabel { color: #ffffff; background-color: #f44449; font-weight: bold; padding: 5px 10px; border-radius: 10px; }""", "share_file_list_drag_enter": """ FileList { border: 3px solid #538ad0; } """, "share_file_list_drag_leave": """ FileList { border: none; } """, "share_file_list_item_size": """ QLabel { color: #666666; font-size: 11px; }""", # Receive mode and child widget styles "receive_file": """ QWidget { background-color: #ffffff; } """, "receive_file_size": """ QLabel { color: #666666; font-size: 11px; }""", "receive_message_button": """ QPushButton { padding: 5px 10px; }""", "receive_options": """ QCheckBox:disabled { color: #666666; }""", # Tor Settings dialogs "tor_settings_error": """ QLabel { color: """ + settings_error_color + """; } """, } def get_tor_paths(self): if self.common.platform == "Linux": base_path = self.get_resource_path("tor") if base_path and os.path.isdir(base_path): self.common.log( "GuiCommon", "get_tor_paths", "using paths in resources" ) tor_path = os.path.join(base_path, "tor") tor_geo_ip_file_path = os.path.join(base_path, "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") snowflake_file_path = os.path.join(base_path, "snowflake-client") meek_client_file_path = os.path.join(base_path, "meek-client") else: # Fallback to looking in the path self.common.log("GuiCommon", "get_tor_paths", "using paths from PATH") tor_path = shutil.which("tor") obfs4proxy_file_path = shutil.which("obfs4proxy") snowflake_file_path = shutil.which("snowflake-client") meek_client_file_path = shutil.which("meek-client") prefix = os.path.dirname(os.path.dirname(tor_path)) tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") if self.common.platform == "Windows": base_path = self.get_resource_path("tor") tor_path = os.path.join(base_path, "tor.exe") obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy.exe") snowflake_file_path = os.path.join(base_path, "snowflake-client.exe") meek_client_file_path = os.path.join(base_path, "meek-client.exe") tor_geo_ip_file_path = os.path.join(base_path, "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") elif self.common.platform == "Darwin": base_path = self.get_resource_path("tor") tor_path = os.path.join(base_path, "tor") obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") snowflake_file_path = os.path.join(base_path, "snowflake-client") meek_client_file_path = os.path.join(base_path, "meek-client") tor_geo_ip_file_path = os.path.join(base_path, "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") elif self.common.platform == "BSD": tor_path = "/usr/local/bin/tor" tor_geo_ip_file_path = "/usr/local/share/tor/geoip" tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6" obfs4proxy_file_path = "/usr/local/bin/obfs4proxy" meek_client_file_path = "/usr/local/bin/meek-client" snowflake_file_path = "/usr/local/bin/snowflake-client" return ( tor_path, tor_geo_ip_file_path, tor_geo_ipv6_file_path, obfs4proxy_file_path, snowflake_file_path, meek_client_file_path, ) @staticmethod def get_resource_path(filename): """ Returns the absolute path of a resource """ try: ref = importlib_resources.files("onionshare.resources") / filename with importlib_resources.as_file(ref) as path: return str(path) except FileNotFoundError: return None @staticmethod def get_translated_tor_error(e): """ Takes an exception defined in onion.py and returns a translated error message """ if type(e) is TorErrorInvalidSetting: return strings._("settings_error_unknown") elif type(e) is TorErrorAutomatic: return strings._("settings_error_automatic") elif type(e) is TorErrorSocketPort: return strings._("settings_error_socket_port").format(e.args[0], e.args[1]) elif type(e) is TorErrorSocketFile: return strings._("settings_error_socket_file").format(e.args[0]) elif type(e) is TorErrorMissingPassword: return strings._("settings_error_missing_password") elif type(e) is TorErrorUnreadableCookieFile: return strings._("settings_error_unreadable_cookie_file") elif type(e) is TorErrorAuthError: return strings._("settings_error_auth").format(e.args[0], e.args[1]) elif type(e) is TorErrorProtocolError: return strings._("error_tor_protocol_error").format(e.args[0]) elif type(e) is BundledTorTimeout: return strings._("settings_error_bundled_tor_timeout") elif type(e) is BundledTorBroken: return strings._("settings_error_bundled_tor_broken").format(e.args[0]) elif type(e) is TorTooOldEphemeral: return strings._("error_ephemeral_not_supported") elif type(e) is TorTooOldStealth: return strings._("error_stealth_not_supported") elif type(e) is PortNotAvailable: return strings._("error_port_not_available") return None @staticmethod def get_translated_web_error(e): """ Takes an exception defined in web.py and returns a translated error message """ if type(e) is WaitressException: return strings._("waitress_web_server_error") class ToggleCheckbox(QtWidgets.QCheckBox): def __init__(self, text): super(ToggleCheckbox, self).__init__(text) # Set default parameters self.setCursor(QtCore.Qt.PointingHandCursor) self.w = 50 self.h = 24 self.bg_color = "#D4D4D4" self.circle_color = "#BDBDBD" self.active_color = "#4E0D4E" self.inactive_color = "" def hitButton(self, pos): return self.toggleRect.contains(pos) def paintEvent(self, e): painter = QtGui.QPainter(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.setPen(QtCore.Qt.NoPen) opt = QtWidgets.QStyleOptionButton() opt.initFrom(self) self.initStyleOption(opt) s = self.style() s.drawControl(QtWidgets.QStyle.CE_CheckBox, opt, painter, self) rect = QtCore.QRect( s.subElementRect(QtWidgets.QStyle.SE_CheckBoxContents, opt, self) ) x = ( rect.width() - rect.x() - self.w + 20 ) # 20 is the padding between text and toggle y = ( self.height() / 2 - self.h / 2 + 16 ) # 16 is the padding top for the checkbox self.toggleRect = QtCore.QRect(x, y, self.w, self.h) painter.setBrush(QtGui.QColor(self.bg_color)) painter.drawRoundedRect(x, y, self.w, self.h, self.h / 2, self.h / 2) if not self.isChecked(): painter.setBrush(QtGui.QColor(self.circle_color)) painter.drawEllipse(x, y - 3, self.h + 6, self.h + 6) else: painter.setBrush(QtGui.QColor(self.active_color)) painter.drawEllipse( x + self.w - (self.h + 6), y - 3, self.h + 6, self.h + 6 ) painter.end() onionshare-2.6.3/desktop/onionshare/main_window.py000066400000000000000000000301261475545702100224060ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os import time from PySide6 import QtCore, QtWidgets, QtGui from . import strings from .widgets import Alert from .connection_tab import AutoConnectTab from .tab_widget import TabWidget from .settings_tab import SettingsTab from .gui_common import GuiCommon from .threads import OnionCleanupThread class MainWindow(QtWidgets.QMainWindow): """ MainWindow is the OnionShare main window, which contains the GUI elements, including all open tabs """ window_resized = QtCore.Signal() def __init__(self, common, filenames): super(MainWindow, self).__init__() self.common = common self.common.log("MainWindow", "__init__") # Initialize the window self.setMinimumWidth(1040) self.setMinimumHeight(700) self.setWindowTitle("OnionShare") self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) # System tray menu = QtWidgets.QMenu() self.settings_action = menu.addAction(strings._("gui_settings_window_title")) self.settings_action.triggered.connect(self.open_settings) self.help_action = menu.addAction(strings._("gui_settings_button_help")) self.help_action.triggered.connect(lambda: SettingsTab.open_help()) exit_action = menu.addAction(strings._("systray_menu_exit")) exit_action.triggered.connect(self.close) self.system_tray = QtWidgets.QSystemTrayIcon(self) # The convention is Mac systray icons are always grayscale if self.common.platform == "Darwin": self.system_tray.setIcon( QtGui.QIcon(GuiCommon.get_resource_path("images/logo_grayscale.png")) ) else: self.system_tray.setIcon( QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")) ) self.system_tray.setContextMenu(menu) self.system_tray.show() # Status bar self.status_bar = QtWidgets.QStatusBar() self.status_bar.setSizeGripEnabled(False) self.status_bar.setStyleSheet(self.common.gui.css["status_bar"]) self.setStatusBar(self.status_bar) # Server status indicator icons self.status_bar.server_status_image_stopped = QtGui.QImage( GuiCommon.get_resource_path(f"images/{self.common.gui.color_mode}_server_stopped.svg") ) self.status_bar.server_status_image_working = QtGui.QImage( GuiCommon.get_resource_path("images/server_working.svg") ) self.status_bar.server_status_image_started = QtGui.QImage( GuiCommon.get_resource_path("images/server_started.svg") ) # Server status indicator on the status bar self.status_bar.server_status_image_label = QtWidgets.QLabel() self.status_bar.server_status_image_label.setFixedWidth(20) self.status_bar.server_status_label = QtWidgets.QLabel("") self.status_bar.server_status_label.setStyleSheet( self.common.gui.css["server_status_indicator_label"] ) server_status_indicator_layout = QtWidgets.QHBoxLayout() server_status_indicator_layout.addWidget( self.status_bar.server_status_image_label ) server_status_indicator_layout.addWidget(self.status_bar.server_status_label) self.status_bar.server_status_indicator = QtWidgets.QWidget() self.status_bar.server_status_indicator.setLayout( server_status_indicator_layout ) self.status_bar.addPermanentWidget(self.status_bar.server_status_indicator) # Settings button self.settings_button = QtWidgets.QPushButton() self.settings_button.setDefault(False) self.settings_button.setFixedSize(40, 50) self.settings_button.setIcon( QtGui.QIcon( GuiCommon.get_resource_path( "images/{}_settings.png".format(self.common.gui.color_mode) ) ) ) sequence = QtGui.QKeySequence(QtCore.Qt.CTRL | QtCore.Qt.Key_H) self.settings_button.setShortcut(sequence) self.settings_button.setAccessibleName(strings._("gui_settings_window_title")) self.settings_button.clicked.connect(self.open_settings) self.settings_button.setStyleSheet(self.common.gui.css["settings_button"]) self.status_bar.addPermanentWidget(self.settings_button) # Tabs self.tabs = TabWidget(self.common, self.system_tray, self.status_bar, self) self.tabs.bring_to_front.connect(self.bring_to_front) # If we have saved persistent tabs, try opening those if len(self.common.settings.get("persistent_tabs")) > 0: for mode_settings_id in self.common.settings.get("persistent_tabs"): self.tabs.load_tab(mode_settings_id) # If not connected to tor in beginning, show autoconnect tab if not self.common.gui.onion.connected_to_tor: self.tabs.new_tab_clicked() else: # Start with opening the first tab self.tabs.new_tab_clicked() # Layout layout = QtWidgets.QVBoxLayout() layout.addWidget(self.tabs) central_widget = QtWidgets.QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) self.show() # Create the close warning dialog -- the dialog widget needs to be in the constructor # in order to test it self.close_dialog = QtWidgets.QMessageBox() self.close_dialog.setWindowTitle(strings._("gui_quit_warning_title")) self.close_dialog.setText(strings._("gui_quit_warning_description")) self.close_dialog.setIcon(QtWidgets.QMessageBox.Critical) self.close_dialog.accept_button = self.close_dialog.addButton( strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.AcceptRole ) self.close_dialog.reject_button = self.close_dialog.addButton( strings._("gui_quit_warning_cancel"), QtWidgets.QMessageBox.NoRole ) self.close_dialog.setDefaultButton(self.close_dialog.reject_button) # Check for autoconnect self.tabs.check_autoconnect_tab() def tor_connection_canceled(self): """ If the user cancels before Tor finishes connecting, ask if they want to quit, or open settings. """ self.common.log("MainWindow", "tor_connection_canceled") def ask(): a = Alert( self.common, strings._("gui_tor_connection_ask"), QtWidgets.QMessageBox.Question, buttons=QtWidgets.QMessageBox.NoButton, autostart=False, ) settings_button = QtWidgets.QPushButton( strings._("gui_tor_connection_ask_open_settings") ) quit_button = QtWidgets.QPushButton( strings._("gui_tor_connection_ask_quit") ) a.addButton(settings_button, QtWidgets.QMessageBox.AcceptRole) a.addButton(quit_button, QtWidgets.QMessageBox.RejectRole) a.setDefaultButton(settings_button) a.exec() if a.clickedButton() == settings_button: # Open settings self.common.log( "OnionShareGui", "_tor_connection_canceled", "Settings button clicked", ) self.open_tor_settings() if a.clickedButton() == quit_button: # Quit self.common.log( "OnionShareGui", "_tor_connection_canceled", "Quit button clicked" ) # Wait 1ms for the event loop to finish, then quit QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit) # Wait 100ms before asking QtCore.QTimer.singleShot(100, ask) def tor_connection_open_tor_settings(self): """ The TorConnectionDialog wants to open the Tor Settings dialog """ self.common.log("MainWindow", "tor_connection_open_tor_settings") # Wait 1ms for the event loop to finish closing the TorConnectionDialog QtCore.QTimer.singleShot(1, self.open_tor_settings) def open_tor_settings(self): """ Open the TorSettingsTab """ self._open_settings(active_tab="tor") def open_settings(self): """ Open the general SettingsTab """ self._open_settings(active_tab="general") def _open_settings(self, active_tab): self.common.log("MainWindow", f"open settings with active tab: {active_tab}") from_autoconnect = False for tab_id in self.tabs.tabs: if type(self.tabs.tabs[tab_id]) is AutoConnectTab: from_autoconnect = True break self.tabs.open_settings_tab(from_autoconnect, active_tab=active_tab) def bring_to_front(self): self.common.log("MainWindow", "bring_to_front") self.raise_() self.activateWindow() def closeEvent(self, e): self.common.log("MainWindow", "closeEvent") if self.tabs.are_tabs_active(): # Open the warning dialog self.common.log("MainWindow", "closeEvent, opening warning dialog") self.close_dialog.exec() # Close if self.close_dialog.clickedButton() == self.close_dialog.accept_button: self.system_tray.hide() e.accept() # Cancel else: e.ignore() return self.system_tray.hide() e.accept() def event(self, event): # Check if color mode switched while onionshare was open, if so, ask user to restart if event.type() == QtCore.QEvent.Type.ApplicationPaletteChange: QtCore.QTimer.singleShot(1, self.color_mode_warning) return True return QtWidgets.QMainWindow.event(self, event) def color_mode_warning(self): """ Open the color mode warning alert. """ notice = strings._("gui_color_mode_changed_notice") Alert(self.common, notice, QtWidgets.QMessageBox.Information) def cleanup(self): self.common.log("MainWindow", "cleanup") self.tabs.cleanup() alert = Alert( self.common, strings._("gui_rendezvous_cleanup"), QtWidgets.QMessageBox.Information, buttons=QtWidgets.QMessageBox.NoButton, autostart=False, ) quit_early_button = QtWidgets.QPushButton( strings._("gui_rendezvous_cleanup_quit_early") ) alert.addButton(quit_early_button, QtWidgets.QMessageBox.RejectRole) self.onion_cleanup_thread = OnionCleanupThread(self.common) self.onion_cleanup_thread.finished.connect(alert.accept) self.onion_cleanup_thread.start() alert.exec() if alert.clickedButton() == quit_early_button: self.common.log("MainWindow", "cleanup", "quitting early") if self.onion_cleanup_thread.isRunning(): self.onion_cleanup_thread.terminate() self.onion_cleanup_thread.wait() self.common.gui.onion.cleanup(wait=False) # Wait 1 second for threads to close gracefully, so tests finally pass time.sleep(1) def resizeEvent(self, event: QtGui.QResizeEvent): self.window_resized.emit() return super(MainWindow, self).resizeEvent(event) onionshare-2.6.3/desktop/onionshare/moat_dialog.py000066400000000000000000000306651475545702100223620ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ OnionShare | https://onionshare.org/ Copyright (C) 2014-2022 Micah Lee, et al. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from PySide6 import QtCore, QtWidgets, QtGui import requests import os import base64 import json from . import strings from .gui_common import GuiCommon from onionshare_cli.meek import MeekNotFound, MeekNotRunning class MoatDialog(QtWidgets.QDialog): """ Moat dialog: Request a bridge from torproject.org """ got_bridges = QtCore.Signal(str) def __init__(self, common, meek): super(MoatDialog, self).__init__() self.common = common self.common.log("MoatDialog", "__init__") self.meek = meek self.setModal(True) self.setWindowTitle(strings._("gui_settings_bridge_moat_button")) self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) # Label self.label = QtWidgets.QLabel() # CAPTCHA image self.captcha = QtWidgets.QLabel() self.captcha.setFixedSize(400, 125) # this is the size of the CAPTCHA image # Solution input self.solution_lineedit = QtWidgets.QLineEdit() self.solution_lineedit.setPlaceholderText(strings._("moat_captcha_placeholder")) self.solution_lineedit.editingFinished.connect( self.solution_lineedit_editing_finished ) self.submit_button = QtWidgets.QPushButton(strings._("moat_captcha_submit")) self.submit_button.clicked.connect(self.submit_clicked) solution_layout = QtWidgets.QHBoxLayout() solution_layout.addWidget(self.solution_lineedit) solution_layout.addWidget(self.submit_button) # Error label self.error_label = QtWidgets.QLabel() self.error_label.setStyleSheet(self.common.gui.css["tor_settings_error"]) self.error_label.hide() # Buttons self.reload_button = QtWidgets.QPushButton(strings._("moat_captcha_reload")) self.reload_button.clicked.connect(self.reload_clicked) self.cancel_button = QtWidgets.QPushButton( strings._("gui_settings_button_cancel") ) self.cancel_button.clicked.connect(self.cancel_clicked) buttons_layout = QtWidgets.QHBoxLayout() buttons_layout.addStretch() buttons_layout.addWidget(self.reload_button) buttons_layout.addWidget(self.cancel_button) # Layout layout = QtWidgets.QVBoxLayout() layout.addWidget(self.label) layout.addWidget(self.captcha) layout.addLayout(solution_layout) layout.addStretch() layout.addWidget(self.error_label) layout.addLayout(buttons_layout) self.setLayout(layout) self.cancel_button.setFocus() self.reload_clicked() def reload_clicked(self): """ Reload button clicked. """ self.common.log("MoatDialog", "reload_clicked") self.label.setText(strings._("moat_contact_label")) self.error_label.hide() self.captcha.hide() self.solution_lineedit.hide() self.reload_button.hide() self.submit_button.hide() # BridgeDB fetch self.t_fetch = MoatThread(self.common, self.meek, "fetch") self.t_fetch.bridgedb_error.connect(self.bridgedb_error) self.t_fetch.captcha_ready.connect(self.captcha_ready) self.t_fetch.start() def submit_clicked(self): """ Submit button clicked. """ self.error_label.hide() self.solution_lineedit.setEnabled(False) solution = self.solution_lineedit.text().strip() if len(solution) == 0: self.common.log("MoatDialog", "submit_clicked", "solution is blank") self.error_label.setText(strings._("moat_solution_empty_error")) self.error_label.show() return # BridgeDB check self.t_check = MoatThread( self.common, self.meek, "check", { "transport": self.transport, "challenge": self.challenge, "solution": self.solution_lineedit.text(), }, ) self.t_check.bridgedb_error.connect(self.bridgedb_error) self.t_check.captcha_error.connect(self.captcha_error) self.t_check.bridges_ready.connect(self.bridges_ready) self.t_check.start() def cancel_clicked(self): """ Cancel button clicked. """ self.common.log("MoatDialog", "cancel_clicked") self.close() def bridgedb_error(self): self.common.log("MoatDialog", "bridgedb_error") self.error_label.setText(strings._("moat_bridgedb_error")) self.error_label.show() self.solution_lineedit.setEnabled(True) def captcha_error(self, msg): self.common.log("MoatDialog", "captcha_error") if msg == "": self.error_label.setText(strings._("moat_captcha_error")) else: self.error_label.setText(msg) self.error_label.show() self.solution_lineedit.setEnabled(True) def captcha_ready(self, transport, image, challenge): self.common.log("MoatDialog", "captcha_ready") self.transport = transport self.challenge = challenge # Save captcha image to disk, so we can load it captcha_data = base64.b64decode(image) captcha_filename = os.path.join(self.common.build_tmp_dir(), "captcha.jpg") with open(captcha_filename, "wb") as f: f.write(captcha_data) self.captcha.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(captcha_filename))) os.remove(captcha_filename) self.label.setText(strings._("moat_captcha_label")) self.captcha.show() self.solution_lineedit.setEnabled(True) self.solution_lineedit.setText("") self.solution_lineedit.show() self.solution_lineedit.setFocus() self.reload_button.show() self.submit_button.show() def solution_lineedit_editing_finished(self): self.common.log("MoatDialog", "solution_lineedit_editing_finished") def bridges_ready(self, bridges): self.common.log("MoatDialog", "bridges_ready", bridges) self.got_bridges.emit(bridges) self.close() class MoatThread(QtCore.QThread): """ This does all of the communicating with BridgeDB in a separate thread. Valid actions are: - "fetch": requests a new CAPTCHA - "check": sends a CAPTCHA solution """ bridgedb_error = QtCore.Signal() captcha_error = QtCore.Signal(str) captcha_ready = QtCore.Signal(str, str, str) bridges_ready = QtCore.Signal(str) def __init__(self, common, meek, action, data={}): super(MoatThread, self).__init__() self.common = common self.common.log("MoatThread", "__init__", f"action={action}") self.meek = meek self.transport = "obfs4" self.action = action self.data = data def run(self): # Start Meek so that we can do domain fronting try: self.meek.start() except ( MeekNotFound, MeekNotRunning, ): self.bridgedb_error.emit() return # We should only fetch bridges if we can domain front, # but we can override this in local-only mode. if not self.meek.meek_proxies and not self.common.gui.local_only: self.common.log( "MoatThread", "run", f"Could not identify meek proxies to make request" ) self.bridgedb_error.emit() return if self.action == "fetch": self.common.log("MoatThread", "run", f"starting fetch") # Request a bridge r = requests.post( "https://bridges.torproject.org/moat/fetch", headers={"Content-Type": "application/vnd.api+json"}, proxies=self.meek.meek_proxies, json={ "data": [ { "version": "0.1.0", "type": "client-transports", "supported": ["obfs4", "snowflake"], } ] }, ) self.meek.cleanup() if r.status_code != 200: self.common.log("MoatThread", "run", f"status_code={r.status_code}") self.bridgedb_error.emit() return try: moat_res = r.json() if "errors" in moat_res: self.common.log("MoatThread", "run", f"errors={moat_res['errors']}") self.bridgedb_error.emit() return if "data" not in moat_res: self.common.log("MoatThread", "run", f"no data") self.bridgedb_error.emit() return if moat_res["data"][0]["type"] != "moat-challenge": self.common.log("MoatThread", "run", f"type != moat-challenge") self.bridgedb_error.emit() return transport = moat_res["data"][0]["transport"] image = moat_res["data"][0]["image"] challenge = moat_res["data"][0]["challenge"] self.captcha_ready.emit(transport, image, challenge) except Exception as e: self.common.log("MoatThread", "run", f"hit exception: {e}") self.bridgedb_error.emit() return elif self.action == "check": self.common.log("MoatThread", "run", f"starting check") # Check the CAPTCHA r = requests.post( "https://bridges.torproject.org/moat/check", headers={"Content-Type": "application/vnd.api+json"}, proxies=self.meek.meek_proxies, json={ "data": [ { "id": "2", "type": "moat-solution", "version": "0.1.0", "transport": self.data["transport"], "challenge": self.data["challenge"], "solution": self.data["solution"], "qrcode": "false", } ] }, ) self.meek.cleanup() if r.status_code != 200: self.common.log("MoatThread", "run", f"status_code={r.status_code}") self.bridgedb_error.emit() return try: moat_res = r.json() self.common.log( "MoatThread", "run", f"got bridges:\n{json.dumps(moat_res,indent=2)}", ) if "errors" in moat_res: self.common.log("MoatThread", "run", f"errors={moat_res['errors']}") if moat_res["errors"][0]["code"] == 419: self.captcha_error.emit("") return else: errors = " ".join([e["detail"] for e in moat_res["errors"]]) self.captcha_error.emit(errors) return if moat_res["data"][0]["type"] != "moat-bridges": self.common.log("MoatThread", "run", f"type != moat-bridges") self.bridgedb_error.emit() return bridges = moat_res["data"][0]["bridges"] self.bridges_ready.emit("\n".join(bridges)) except Exception as e: self.common.log("MoatThread", "run", f"hit exception: {e}") self.bridgedb_error.emit() return else: self.common.log("MoatThread", "run", f"invalid action: {self.action}") onionshare-2.6.3/desktop/onionshare/resources/000077500000000000000000000000001475545702100215315ustar00rootroot00000000000000onionshare-2.6.3/desktop/onionshare/resources/__init__.py000066400000000000000000000000001475545702100236300ustar00rootroot00000000000000onionshare-2.6.3/desktop/onionshare/resources/countries/000077500000000000000000000000001475545702100235445ustar00rootroot00000000000000onionshare-2.6.3/desktop/onionshare/resources/countries/af.json000066400000000000000000000116741475545702100250360ustar00rootroot00000000000000{"AF": "Afganistan", "AX": "\u00c5landeilande", "AL": "Albani\u00eb", "DZ": "Algeri\u00eb", "AS": "Amerikaanse Samoa", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktika", "AG": "Antigua en Barbuda", "AR": "Argentini\u00eb", "AM": "Armeni\u00eb", "AW": "Aruba", "AU": "Australi\u00eb", "AZ": "Azerbeidjan", "BS": "Bahamas", "BH": "Bahrein", "BD": "Bangladesj", "BB": "Barbados", "BY": "Belarus", "BE": "Belgi\u00eb", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhoetan", "BO": "Bolivi\u00eb", "BA": "Bosni\u00eb en Herzegowina", "BW": "Botswana", "BV": "Bouvet-eiland", "BR": "Brasili\u00eb", "IO": "Brits-Indiese Oseaangebied", "VG": "Britse Maagde-eilande", "BN": "Broenei", "BG": "Bulgarye", "BF": "Burkina Faso", "BI": "Burundi", "CL": "Chili", "CO": "Colombi\u00eb", "KM": "Comore", "CK": "Cookeilande", "CR": "Costa Rica", "CW": "Cura\u00e7ao", "CD": "Demokratiese Republiek van die Kongo", "DK": "Denemarke", "DJ": "Djiboeti", "DM": "Dominica", "DO": "Dominikaanse Republiek", "DE": "Duitsland", "EC": "Ecuador", "EG": "Egipte", "IM": "Eiland Man", "GQ": "Ekwatoriaal-Guinee", "SV": "El Salvador", "ER": "Eritrea", "EE": "Estland", "SZ": "Eswatini", "ET": "Ethiopi\u00eb", "FK": "Falklandeilande", "FO": "Faro\u00ebreilande", "FJ": "Fidji", "PH": "Filippyne", "FI": "Finland", "FR": "Frankryk", "GF": "Frans-Guyana", "PF": "Frans-Polinesi\u00eb", "TF": "Franse Suidelike Gebiede", "GA": "Gaboen", "GM": "Gambi\u00eb", "GE": "Georgi\u00eb", "GH": "Ghana", "GI": "Gibraltar", "GD": "Grenada", "GR": "Griekeland", "GL": "Groenland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinee", "GW": "Guinee-Bissau", "GY": "Guyana", "HT": "Ha\u00efti", "HM": "Heardeiland en McDonaldeilande", "HN": "Honduras", "HU": "Hongarye", "HK": "Hongkong SAS Sjina", "IE": "Ierland", "IN": "Indi\u00eb", "ID": "Indonesi\u00eb", "IQ": "Irak", "IR": "Iran", "IL": "Israel", "IT": "Itali\u00eb", "CI": "Ivoorkus", "JM": "Jamaika", "JP": "Japan", "YE": "Jemen", "JO": "Jordani\u00eb", "KY": "Kaaimanseilande", "CV": "Kaap Verde", "KH": "Kambodja", "CM": "Kameroen", "CA": "Kanada", "BQ": "Karibiese Nederland", "QA": "Katar", "KZ": "Kazakstan", "KE": "Kenia", "CX": "Kerseiland", "KG": "Kirgistan", "KI": "Kiribati", "KW": "Koeweit", "CC": "Kokoseilande", "CG": "Kongo - Brazzaville", "HR": "Kroasi\u00eb", "CU": "Kuba", "LA": "Laos", "LS": "Lesotho", "LV": "Letland", "LB": "Libanon", "LR": "Liberi\u00eb", "LY": "Libi\u00eb", "LI": "Liechtenstein", "LT": "Litaue", "LU": "Luxemburg", "MO": "Macau SAS Sjina", "MG": "Madagaskar", "MW": "Malawi", "MV": "Maledive", "MY": "Maleisi\u00eb", "ML": "Mali", "MT": "Malta", "MA": "Marokko", "MQ": "Martinique", "MR": "Mauritani\u00eb", "MU": "Mauritius", "YT": "Mayotte", "MX": "Meksiko", "MM": "Mianmar (Birma)", "MD": "Moldowa", "MC": "Monaco", "MN": "Mongoli\u00eb", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mosambiek", "NA": "Namibi\u00eb", "NR": "Nauru", "NL": "Nederland", "NP": "Nepal", "NI": "Nicaragua", "NC": "Nieu-Kaledoni\u00eb", "NZ": "Nieu-Seeland", "NE": "Niger", "NG": "Nigeri\u00eb", "NU": "Niue", "KP": "Noord-Korea", "MK": "Noord-Macedoni\u00eb", "NO": "Noorwe\u00eb", "NF": "Norfolkeiland", "UA": "Oekra\u00efne", "UZ": "Oesbekistan", "OM": "Oman", "TL": "Oos-Timor", "AT": "Oostenryk", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papoea-Nieu-Guinee", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairneilande", "PL": "Pole", "PT": "Portugal", "PR": "Puerto Rico", "RE": "R\u00e9union", "RO": "Roemeni\u00eb", "RU": "Rusland", "RW": "Rwanda", "SB": "Salomonseilande", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 en Pr\u00edncipe", "SA": "Saoedi-Arabi\u00eb", "SN": "Senegal", "CF": "Sentraal-Afrikaanse Republiek", "RS": "Serwi\u00eb", "SC": "Seychelle", "SL": "Sierra Leone", "SG": "Singapoer", "BL": "Sint Barth\u00e9lemy", "SH": "Sint Helena", "KN": "Sint Kitts en Nevis", "LC": "Sint Lucia", "SX": "Sint Maarten", "MF": "Sint Martin", "PM": "Sint Pierre en Miquelon", "VC": "Sint Vincent en die Grenadine", "CY": "Siprus", "SY": "Siri\u00eb", "CN": "Sjina", "SK": "Slowakye", "SI": "Sloweni\u00eb", "SD": "Soedan", "SO": "Somali\u00eb", "ES": "Spanje", "LK": "Sri Lanka", "ZA": "Suid-Afrika", "GS": "Suid-Georgi\u00eb en die Suidelike Sandwicheilande", "KR": "Suid-Korea", "SS": "Suid-Soedan", "SR": "Suriname", "SJ": "Svalbard en Jan Mayen", "SE": "Swede", "CH": "Switserland", "TJ": "Tadjikistan", "TW": "Taiwan", "TZ": "Tanzani\u00eb", "TH": "Thailand", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad en Tobago", "TD": "Tsjad", "CZ": "Tsjeggi\u00eb", "TN": "Tunisi\u00eb", "TM": "Turkmenistan", "TC": "Turks- en Caicoseilande", "TR": "Turkye", "UG": "Uganda", "UY": "Uruguay", "VU": "Vanuatu", "VA": "Vatikaanstad", "VE": "Venezuela", "AE": "Verenigde Arabiese Emirate", "GB": "Verenigde Koninkryk", "US": "Verenigde State van Amerika", "VN": "Vi\u00ebtnam", "VI": "VSA se Maagde-eilande", "WF": "Wallis en Futuna", "EH": "Wes-Sahara", "IS": "Ysland", "ZM": "Zambi\u00eb", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/ar.json000066400000000000000000000356331475545702100250530ustar00rootroot00000000000000{"IS": "\u0622\u064a\u0633\u0644\u0646\u062f\u0627", "ET": "\u0625\u062b\u064a\u0648\u0628\u064a\u0627", "AZ": "\u0623\u0630\u0631\u0628\u064a\u062c\u0627\u0646", "AM": "\u0623\u0631\u0645\u064a\u0646\u064a\u0627", "AW": "\u0623\u0631\u0648\u0628\u0627", "ER": "\u0625\u0631\u064a\u062a\u0631\u064a\u0627", "ES": "\u0625\u0633\u0628\u0627\u0646\u064a\u0627", "AU": "\u0623\u0633\u062a\u0631\u0627\u0644\u064a\u0627", "EE": "\u0625\u0633\u062a\u0648\u0646\u064a\u0627", "IL": "\u0625\u0633\u0631\u0627\u0626\u064a\u0644", "SZ": "\u0625\u0633\u0648\u0627\u062a\u064a\u0646\u064a", "AF": "\u0623\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646", "AR": "\u0627\u0644\u0623\u0631\u062c\u0646\u062a\u064a\u0646", "JO": "\u0627\u0644\u0623\u0631\u062f\u0646", "TF": "\u0627\u0644\u0623\u0642\u0627\u0644\u064a\u0645 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629 \u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629", "IO": "\u0627\u0644\u0625\u0642\u0644\u064a\u0645 \u0627\u0644\u0628\u0631\u064a\u0637\u0627\u0646\u064a \u0641\u064a \u0627\u0644\u0645\u062d\u064a\u0637 \u0627\u0644\u0647\u0646\u062f\u064a", "EC": "\u0627\u0644\u0625\u0643\u0648\u0627\u062f\u0648\u0631", "AE": "\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629", "AL": "\u0623\u0644\u0628\u0627\u0646\u064a\u0627", "BH": "\u0627\u0644\u0628\u062d\u0631\u064a\u0646", "BR": "\u0627\u0644\u0628\u0631\u0627\u0632\u064a\u0644", "PT": "\u0627\u0644\u0628\u0631\u062a\u063a\u0627\u0644", "BA": "\u0627\u0644\u0628\u0648\u0633\u0646\u0629 \u0648\u0627\u0644\u0647\u0631\u0633\u0643", "CZ": "\u0627\u0644\u062a\u0634\u064a\u0643", "ME": "\u0627\u0644\u062c\u0628\u0644 \u0627\u0644\u0623\u0633\u0648\u062f", "DZ": "\u0627\u0644\u062c\u0632\u0627\u0626\u0631", "DK": "\u0627\u0644\u062f\u0627\u0646\u0645\u0631\u0643", "CV": "\u0627\u0644\u0631\u0623\u0633 \u0627\u0644\u0623\u062e\u0636\u0631", "SV": "\u0627\u0644\u0633\u0644\u0641\u0627\u062f\u0648\u0631", "SN": "\u0627\u0644\u0633\u0646\u063a\u0627\u0644", "SD": "\u0627\u0644\u0633\u0648\u062f\u0627\u0646", "SE": "\u0627\u0644\u0633\u0648\u064a\u062f", "EH": "\u0627\u0644\u0635\u062d\u0631\u0627\u0621 \u0627\u0644\u063a\u0631\u0628\u064a\u0629", "SO": "\u0627\u0644\u0635\u0648\u0645\u0627\u0644", "CN": "\u0627\u0644\u0635\u064a\u0646", "IQ": "\u0627\u0644\u0639\u0631\u0627\u0642", "GA": "\u0627\u0644\u063a\u0627\u0628\u0648\u0646", "VA": "\u0627\u0644\u0641\u0627\u062a\u064a\u0643\u0627\u0646", "PH": "\u0627\u0644\u0641\u0644\u0628\u064a\u0646", "CM": "\u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0648\u0646", "CG": "\u0627\u0644\u0643\u0648\u0646\u063a\u0648 - \u0628\u0631\u0627\u0632\u0627\u0641\u064a\u0644", "CD": "\u0627\u0644\u0643\u0648\u0646\u063a\u0648 - \u0643\u064a\u0646\u0634\u0627\u0633\u0627", "KW": "\u0627\u0644\u0643\u0648\u064a\u062a", "DE": "\u0623\u0644\u0645\u0627\u0646\u064a\u0627", "MA": "\u0627\u0644\u0645\u063a\u0631\u0628", "MX": "\u0627\u0644\u0645\u0643\u0633\u064a\u0643", "SA": "\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629 \u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629", "GB": "\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629", "NO": "\u0627\u0644\u0646\u0631\u0648\u064a\u062c", "AT": "\u0627\u0644\u0646\u0645\u0633\u0627", "NE": "\u0627\u0644\u0646\u064a\u062c\u0631", "IN": "\u0627\u0644\u0647\u0646\u062f", "US": "\u0627\u0644\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629", "JP": "\u0627\u0644\u064a\u0627\u0628\u0627\u0646", "YE": "\u0627\u0644\u064a\u0645\u0646", "GR": "\u0627\u0644\u064a\u0648\u0646\u0627\u0646", "AQ": "\u0623\u0646\u062a\u0627\u0631\u0643\u062a\u064a\u0643\u0627", "AG": "\u0623\u0646\u062a\u064a\u063a\u0648\u0627 \u0648\u0628\u0631\u0628\u0648\u062f\u0627", "AD": "\u0623\u0646\u062f\u0648\u0631\u0627", "ID": "\u0625\u0646\u062f\u0648\u0646\u064a\u0633\u064a\u0627", "AO": "\u0623\u0646\u063a\u0648\u0644\u0627", "AI": "\u0623\u0646\u063a\u0648\u064a\u0644\u0627", "UY": "\u0623\u0648\u0631\u063a\u0648\u0627\u064a", "UZ": "\u0623\u0648\u0632\u0628\u0643\u0633\u062a\u0627\u0646", "UG": "\u0623\u0648\u063a\u0646\u062f\u0627", "UA": "\u0623\u0648\u0643\u0631\u0627\u0646\u064a\u0627", "IR": "\u0625\u064a\u0631\u0627\u0646", "IE": "\u0623\u064a\u0631\u0644\u0646\u062f\u0627", "IT": "\u0625\u064a\u0637\u0627\u0644\u064a\u0627", "PG": "\u0628\u0627\u0628\u0648\u0627 \u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629", "PY": "\u0628\u0627\u0631\u0627\u063a\u0648\u0627\u064a", "PK": "\u0628\u0627\u0643\u0633\u062a\u0627\u0646", "PW": "\u0628\u0627\u0644\u0627\u0648", "BB": "\u0628\u0631\u0628\u0627\u062f\u0648\u0633", "BM": "\u0628\u0631\u0645\u0648\u062f\u0627", "BN": "\u0628\u0631\u0648\u0646\u0627\u064a", "BE": "\u0628\u0644\u062c\u064a\u0643\u0627", "BG": "\u0628\u0644\u063a\u0627\u0631\u064a\u0627", "BZ": "\u0628\u0644\u064a\u0632", "BD": "\u0628\u0646\u063a\u0644\u0627\u062f\u064a\u0634", "PA": "\u0628\u0646\u0645\u0627", "BJ": "\u0628\u0646\u064a\u0646", "BT": "\u0628\u0648\u062a\u0627\u0646", "BW": "\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627", "PR": "\u0628\u0648\u0631\u062a\u0648\u0631\u064a\u0643\u0648", "BF": "\u0628\u0648\u0631\u0643\u064a\u0646\u0627 \u0641\u0627\u0633\u0648", "BI": "\u0628\u0648\u0631\u0648\u0646\u062f\u064a", "PL": "\u0628\u0648\u0644\u0646\u062f\u0627", "BO": "\u0628\u0648\u0644\u064a\u0641\u064a\u0627", "PF": "\u0628\u0648\u0644\u064a\u0646\u064a\u0632\u064a\u0627 \u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629", "PE": "\u0628\u064a\u0631\u0648", "BY": "\u0628\u064a\u0644\u0627\u0631\u0648\u0633", "TH": "\u062a\u0627\u064a\u0644\u0627\u0646\u062f", "TW": "\u062a\u0627\u064a\u0648\u0627\u0646", "TM": "\u062a\u0631\u0643\u0645\u0627\u0646\u0633\u062a\u0627\u0646", "TR": "\u062a\u0631\u0643\u064a\u0627", "TT": "\u062a\u0631\u064a\u0646\u064a\u062f\u0627\u062f \u0648\u062a\u0648\u0628\u0627\u063a\u0648", "TD": "\u062a\u0634\u0627\u062f", "CL": "\u062a\u0634\u064a\u0644\u064a", "TZ": "\u062a\u0646\u0632\u0627\u0646\u064a\u0627", "TG": "\u062a\u0648\u063a\u0648", "TK": "\u062a\u0648\u0643\u064a\u0644\u0648", "TN": "\u062a\u0648\u0646\u0633", "TO": "\u062a\u0648\u0646\u063a\u0627", "TL": "\u062a\u064a\u0645\u0648\u0631 - \u0644\u064a\u0634\u062a\u064a", "JM": "\u062c\u0627\u0645\u0627\u064a\u0643\u0627", "GI": "\u062c\u0628\u0644 \u0637\u0627\u0631\u0642", "AX": "\u062c\u0632\u0631 \u0622\u0644\u0627\u0646\u062f", "BS": "\u062c\u0632\u0631 \u0627\u0644\u0628\u0647\u0627\u0645\u0627", "KM": "\u062c\u0632\u0631 \u0627\u0644\u0642\u0645\u0631", "MQ": "\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0631\u062a\u064a\u0646\u064a\u0643", "MV": "\u062c\u0632\u0631 \u0627\u0644\u0645\u0627\u0644\u062f\u064a\u0641", "PN": "\u062c\u0632\u0631 \u0628\u064a\u062a\u0643\u064a\u0631\u0646", "TC": "\u062c\u0632\u0631 \u062a\u0648\u0631\u0643\u0633 \u0648\u0643\u0627\u064a\u0643\u0648\u0633", "SB": "\u062c\u0632\u0631 \u0633\u0644\u064a\u0645\u0627\u0646", "FO": "\u062c\u0632\u0631 \u0641\u0627\u0631\u0648", "FK": "\u062c\u0632\u0631 \u0641\u0648\u0643\u0644\u0627\u0646\u062f", "VG": "\u062c\u0632\u0631 \u0641\u064a\u0631\u062c\u0646 \u0627\u0644\u0628\u0631\u064a\u0637\u0627\u0646\u064a\u0629", "VI": "\u062c\u0632\u0631 \u0641\u064a\u0631\u062c\u0646 \u0627\u0644\u062a\u0627\u0628\u0639\u0629 \u0644\u0644\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629", "KY": "\u062c\u0632\u0631 \u0643\u0627\u064a\u0645\u0627\u0646", "CK": "\u062c\u0632\u0631 \u0643\u0648\u0643", "CC": "\u062c\u0632\u0631 \u0643\u0648\u0643\u0648\u0633 (\u0643\u064a\u0644\u064a\u0646\u063a)", "WF": "\u062c\u0632\u0631 \u0648\u0627\u0644\u0633 \u0648\u0641\u0648\u062a\u0648\u0646\u0627", "BV": "\u062c\u0632\u064a\u0631\u0629 \u0628\u0648\u0641\u064a\u0647", "CX": "\u062c\u0632\u064a\u0631\u0629 \u0643\u0631\u064a\u0633\u0645\u0627\u0633", "IM": "\u062c\u0632\u064a\u0631\u0629 \u0645\u0627\u0646", "NF": "\u062c\u0632\u064a\u0631\u0629 \u0646\u0648\u0631\u0641\u0648\u0644\u0643", "HM": "\u062c\u0632\u064a\u0631\u0629 \u0647\u064a\u0631\u062f \u0648\u062c\u0632\u0631 \u0645\u0627\u0643\u062f\u0648\u0646\u0627\u0644\u062f", "CF": "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0623\u0641\u0631\u064a\u0642\u064a\u0627 \u0627\u0644\u0648\u0633\u0637\u0649", "DO": "\u062c\u0645\u0647\u0648\u0631\u064a\u0629 \u0627\u0644\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627\u0646", "ZA": "\u062c\u0646\u0648\u0628 \u0623\u0641\u0631\u064a\u0642\u064a\u0627", "SS": "\u062c\u0646\u0648\u0628 \u0627\u0644\u0633\u0648\u062f\u0627\u0646", "GE": "\u062c\u0648\u0631\u062c\u064a\u0627", "GS": "\u062c\u0648\u0631\u062c\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629 \u0648\u062c\u0632\u0631 \u0633\u0627\u0646\u062f\u0648\u064a\u062a\u0634 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629", "DJ": "\u062c\u064a\u0628\u0648\u062a\u064a", "DM": "\u062f\u0648\u0645\u064a\u0646\u064a\u0643\u0627", "RW": "\u0631\u0648\u0627\u0646\u062f\u0627", "RU": "\u0631\u0648\u0633\u064a\u0627", "RO": "\u0631\u0648\u0645\u0627\u0646\u064a\u0627", "RE": "\u0631\u0648\u064a\u0646\u064a\u0648\u0646", "ZM": "\u0632\u0627\u0645\u0628\u064a\u0627", "ZW": "\u0632\u064a\u0645\u0628\u0627\u0628\u0648\u064a", "CI": "\u0633\u0627\u062d\u0644 \u0627\u0644\u0639\u0627\u062c", "WS": "\u0633\u0627\u0645\u0648\u0627", "AS": "\u0633\u0627\u0645\u0648\u0627 \u0627\u0644\u0623\u0645\u0631\u064a\u0643\u064a\u0629", "BL": "\u0633\u0627\u0646 \u0628\u0627\u0631\u062a\u0644\u064a\u0645\u064a", "PM": "\u0633\u0627\u0646 \u0628\u064a\u064a\u0631 \u0648\u0645\u0643\u0648\u064a\u0644\u0648\u0646", "MF": "\u0633\u0627\u0646 \u0645\u0627\u0631\u062a\u0646", "SM": "\u0633\u0627\u0646 \u0645\u0627\u0631\u064a\u0646\u0648", "VC": "\u0633\u0627\u0646\u062a \u0641\u0646\u0633\u0646\u062a \u0648\u062c\u0632\u0631 \u063a\u0631\u064a\u0646\u0627\u062f\u064a\u0646", "KN": "\u0633\u0627\u0646\u062a \u0643\u064a\u062a\u0633 \u0648\u0646\u064a\u0641\u064a\u0633", "LC": "\u0633\u0627\u0646\u062a \u0644\u0648\u0633\u064a\u0627", "SX": "\u0633\u0627\u0646\u062a \u0645\u0627\u0631\u062a\u0646", "SH": "\u0633\u0627\u0646\u062a \u0647\u064a\u0644\u064a\u0646\u0627", "ST": "\u0633\u0627\u0648 \u062a\u0648\u0645\u064a \u0648\u0628\u0631\u064a\u0646\u0633\u064a\u0628\u064a", "LK": "\u0633\u0631\u064a\u0644\u0627\u0646\u0643\u0627", "SJ": "\u0633\u0641\u0627\u0644\u0628\u0627\u0631\u062f \u0648\u062c\u0627\u0646 \u0645\u0627\u064a\u0646", "SK": "\u0633\u0644\u0648\u0641\u0627\u0643\u064a\u0627", "SI": "\u0633\u0644\u0648\u0641\u064a\u0646\u064a\u0627", "SG": "\u0633\u0646\u063a\u0627\u0641\u0648\u0631\u0629", "SY": "\u0633\u0648\u0631\u064a\u0627", "SR": "\u0633\u0648\u0631\u064a\u0646\u0627\u0645", "CH": "\u0633\u0648\u064a\u0633\u0631\u0627", "SL": "\u0633\u064a\u0631\u0627\u0644\u064a\u0648\u0646", "SC": "\u0633\u064a\u0634\u0644", "RS": "\u0635\u0631\u0628\u064a\u0627", "TJ": "\u0637\u0627\u062c\u064a\u0643\u0633\u062a\u0627\u0646", "OM": "\u0639\u064f\u0645\u0627\u0646", "GM": "\u063a\u0627\u0645\u0628\u064a\u0627", "GH": "\u063a\u0627\u0646\u0627", "GD": "\u063a\u0631\u064a\u0646\u0627\u062f\u0627", "GL": "\u063a\u0631\u064a\u0646\u0644\u0627\u0646\u062f", "GT": "\u063a\u0648\u0627\u062a\u064a\u0645\u0627\u0644\u0627", "GP": "\u063a\u0648\u0627\u062f\u0644\u0648\u0628", "GU": "\u063a\u0648\u0627\u0645", "GF": "\u063a\u0648\u064a\u0627\u0646\u0627 \u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629", "GY": "\u063a\u064a\u0627\u0646\u0627", "GG": "\u063a\u064a\u0631\u0646\u0632\u064a", "GN": "\u063a\u064a\u0646\u064a\u0627", "GQ": "\u063a\u064a\u0646\u064a\u0627 \u0627\u0644\u0627\u0633\u062a\u0648\u0627\u0626\u064a\u0629", "GW": "\u063a\u064a\u0646\u064a\u0627 \u0628\u064a\u0633\u0627\u0648", "VU": "\u0641\u0627\u0646\u0648\u0627\u062a\u0648", "FR": "\u0641\u0631\u0646\u0633\u0627", "VE": "\u0641\u0646\u0632\u0648\u064a\u0644\u0627", "FI": "\u0641\u0646\u0644\u0646\u062f\u0627", "VN": "\u0641\u064a\u062a\u0646\u0627\u0645", "FJ": "\u0641\u064a\u062c\u064a", "CY": "\u0642\u0628\u0631\u0635", "QA": "\u0642\u0637\u0631", "KG": "\u0642\u064a\u0631\u063a\u064a\u0632\u0633\u062a\u0627\u0646", "KZ": "\u0643\u0627\u0632\u0627\u062e\u0633\u062a\u0627\u0646", "NC": "\u0643\u0627\u0644\u064a\u062f\u0648\u0646\u064a\u0627 \u0627\u0644\u062c\u062f\u064a\u062f\u0629", "HR": "\u0643\u0631\u0648\u0627\u062a\u064a\u0627", "KH": "\u0643\u0645\u0628\u0648\u062f\u064a\u0627", "CA": "\u0643\u0646\u062f\u0627", "CU": "\u0643\u0648\u0628\u0627", "CW": "\u0643\u0648\u0631\u0627\u0633\u0627\u0648", "KR": "\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u062c\u0646\u0648\u0628\u064a\u0629", "KP": "\u0643\u0648\u0631\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629", "CR": "\u0643\u0648\u0633\u062a\u0627\u0631\u064a\u0643\u0627", "CO": "\u0643\u0648\u0644\u0648\u0645\u0628\u064a\u0627", "KI": "\u0643\u064a\u0631\u064a\u0628\u0627\u062a\u064a", "KE": "\u0643\u064a\u0646\u064a\u0627", "LV": "\u0644\u0627\u062a\u0641\u064a\u0627", "LA": "\u0644\u0627\u0648\u0633", "LB": "\u0644\u0628\u0646\u0627\u0646", "LU": "\u0644\u0648\u0643\u0633\u0645\u0628\u0648\u0631\u063a", "LY": "\u0644\u064a\u0628\u064a\u0627", "LR": "\u0644\u064a\u0628\u064a\u0631\u064a\u0627", "LT": "\u0644\u064a\u062a\u0648\u0627\u0646\u064a\u0627", "LI": "\u0644\u064a\u062e\u062a\u0646\u0634\u062a\u0627\u064a\u0646", "LS": "\u0644\u064a\u0633\u0648\u062a\u0648", "MT": "\u0645\u0627\u0644\u0637\u0627", "ML": "\u0645\u0627\u0644\u064a", "MY": "\u0645\u0627\u0644\u064a\u0632\u064a\u0627", "YT": "\u0645\u0627\u064a\u0648\u062a", "MG": "\u0645\u062f\u063a\u0634\u0642\u0631", "EG": "\u0645\u0635\u0631", "MK": "\u0645\u0642\u062f\u0648\u0646\u064a\u0627 \u0627\u0644\u0634\u0645\u0627\u0644\u064a\u0629", "MW": "\u0645\u0644\u0627\u0648\u064a", "MO": "\u0645\u0646\u0637\u0642\u0629 \u0645\u0627\u0643\u0627\u0648 \u0627\u0644\u0625\u062f\u0627\u0631\u064a\u0629 \u0627\u0644\u062e\u0627\u0635\u0629", "MN": "\u0645\u0646\u063a\u0648\u0644\u064a\u0627", "MR": "\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627", "MU": "\u0645\u0648\u0631\u064a\u0634\u064a\u0648\u0633", "MZ": "\u0645\u0648\u0632\u0645\u0628\u064a\u0642", "MD": "\u0645\u0648\u0644\u062f\u0648\u0641\u0627", "MC": "\u0645\u0648\u0646\u0627\u0643\u0648", "MS": "\u0645\u0648\u0646\u062a\u0633\u0631\u0627\u062a", "MM": "\u0645\u064a\u0627\u0646\u0645\u0627\u0631 (\u0628\u0648\u0631\u0645\u0627)", "NA": "\u0646\u0627\u0645\u064a\u0628\u064a\u0627", "NR": "\u0646\u0627\u0648\u0631\u0648", "NP": "\u0646\u064a\u0628\u0627\u0644", "NG": "\u0646\u064a\u062c\u064a\u0631\u064a\u0627", "NI": "\u0646\u064a\u0643\u0627\u0631\u0627\u063a\u0648\u0627", "NZ": "\u0646\u064a\u0648\u0632\u064a\u0644\u0646\u062f\u0627", "NU": "\u0646\u064a\u0648\u064a", "HT": "\u0647\u0627\u064a\u062a\u064a", "HN": "\u0647\u0646\u062f\u0648\u0631\u0627\u0633", "HU": "\u0647\u0646\u063a\u0627\u0631\u064a\u0627", "NL": "\u0647\u0648\u0644\u0646\u062f\u0627", "BQ": "\u0647\u0648\u0644\u0646\u062f\u0627 \u0627\u0644\u0643\u0627\u0631\u064a\u0628\u064a\u0629", "HK": "\u0647\u0648\u0646\u063a \u0643\u0648\u0646\u063a \u0627\u0644\u0635\u064a\u0646\u064a\u0629 (\u0645\u0646\u0637\u0642\u0629 \u0625\u062f\u0627\u0631\u064a\u0629 \u062e\u0627\u0635\u0629)"}onionshare-2.6.3/desktop/onionshare/resources/countries/be.json000066400000000000000000000403211475545702100250250ustar00rootroot00000000000000{"AE": "\u0410\u0431\u2019\u044f\u0434\u043d\u0430\u043d\u044b\u044f \u0410\u0440\u0430\u0431\u0441\u043a\u0456\u044f \u042d\u043c\u0456\u0440\u0430\u0442\u044b", "AZ": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "AX": "\u0410\u043b\u0430\u043d\u0434\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "AL": "\u0410\u043b\u0431\u0430\u043d\u0456\u044f", "DZ": "\u0410\u043b\u0436\u044b\u0440", "OM": "\u0410\u043c\u0430\u043d", "AS": "\u0410\u043c\u0435\u0440\u044b\u043a\u0430\u043d\u0441\u043a\u0430\u0435 \u0421\u0430\u043c\u043e\u0430", "VI": "\u0410\u043c\u0435\u0440\u044b\u043a\u0430\u043d\u0441\u043a\u0456\u044f \u0412\u0456\u0440\u0433\u0456\u043d\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "AI": "\u0410\u043d\u0433\u0456\u043b\u044c\u044f", "AO": "\u0410\u043d\u0433\u043e\u043b\u0430", "AD": "\u0410\u043d\u0434\u043e\u0440\u0430", "AQ": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u044b\u043a\u0430", "AG": "\u0410\u043d\u0442\u044b\u0433\u0443\u0430 \u0456 \u0411\u0430\u0440\u0431\u0443\u0434\u0430", "AR": "\u0410\u0440\u0433\u0435\u043d\u0446\u0456\u043d\u0430", "AM": "\u0410\u0440\u043c\u0435\u043d\u0456\u044f", "AW": "\u0410\u0440\u0443\u0431\u0430", "CK": "\u0410\u0441\u0442\u0440\u0430\u0432\u044b \u041a\u0443\u043a\u0430", "PN": "\u0410\u0441\u0442\u0440\u0430\u0432\u044b \u041f\u0456\u0442\u043a\u044d\u0440\u043d", "HM": "\u0410\u0441\u0442\u0440\u0430\u0432\u044b \u0425\u0435\u0440\u0434 \u0456 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u044c\u0434", "TC": "\u0410\u0441\u0442\u0440\u0430\u0432\u044b \u0426\u0451\u0440\u043a\u0441 \u0456 \u041a\u0430\u0439\u043a\u0430\u0441", "AU": "\u0410\u045e\u0441\u0442\u0440\u0430\u043b\u0456\u044f", "AT": "\u0410\u045e\u0441\u0442\u0440\u044b\u044f", "AF": "\u0410\u0444\u0433\u0430\u043d\u0456\u0441\u0442\u0430\u043d", "BS": "\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "BG": "\u0411\u0430\u043b\u0433\u0430\u0440\u044b\u044f", "BO": "\u0411\u0430\u043b\u0456\u0432\u0456\u044f", "BD": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u044d\u0448", "BB": "\u0411\u0430\u0440\u0431\u0430\u0434\u0430\u0441", "BW": "\u0411\u0430\u0442\u0441\u0432\u0430\u043d\u0430", "BH": "\u0411\u0430\u0445\u0440\u044d\u0439\u043d", "BY": "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c", "BZ": "\u0411\u0435\u043b\u0456\u0437", "BE": "\u0411\u0435\u043b\u044c\u0433\u0456\u044f", "BJ": "\u0411\u0435\u043d\u0456\u043d", "BM": "\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "BA": "\u0411\u043e\u0441\u043d\u0456\u044f \u0456 \u0413\u0435\u0440\u0446\u0430\u0433\u0430\u0432\u0456\u043d\u0430", "BR": "\u0411\u0440\u0430\u0437\u0456\u043b\u0456\u044f", "BN": "\u0411\u0440\u0443\u043d\u0435\u0439", "IO": "\u0411\u0440\u044b\u0442\u0430\u043d\u0441\u043a\u0430\u044f \u0442\u044d\u0440\u044b\u0442\u043e\u0440\u044b\u044f \u045e \u0406\u043d\u0434\u044b\u0439\u0441\u043a\u0456\u043c \u0430\u043a\u0456\u044f\u043d\u0435", "VG": "\u0411\u0440\u044b\u0442\u0430\u043d\u0441\u043a\u0456\u044f \u0412\u0456\u0440\u0433\u0456\u043d\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "BF": "\u0411\u0443\u0440\u043a\u0456\u043d\u0430-\u0424\u0430\u0441\u043e", "BI": "\u0411\u0443\u0440\u0443\u043d\u0434\u0437\u0456", "BT": "\u0411\u0443\u0442\u0430\u043d", "VN": "\u0412\u2019\u0435\u0442\u043d\u0430\u043c", "VU": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "VA": "\u0412\u0430\u0442\u044b\u043a\u0430\u043d", "HU": "\u0412\u0435\u043d\u0433\u0440\u044b\u044f", "VE": "\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u0430", "BV": "\u0412\u043e\u0441\u0442\u0440\u0430\u045e \u0411\u0443\u0432\u044d", "CX": "\u0412\u043e\u0441\u0442\u0440\u0430\u045e \u041a\u0430\u043b\u044f\u0434", "IM": "\u0412\u043e\u0441\u0442\u0440\u0430\u045e \u041c\u044d\u043d", "NF": "\u0412\u043e\u0441\u0442\u0440\u0430\u045e \u041d\u043e\u0440\u0444\u0430\u043b\u043a", "SH": "\u0412\u043e\u0441\u0442\u0440\u0430\u045e \u0421\u0432\u044f\u0442\u043e\u0439 \u0410\u043b\u0435\u043d\u044b", "GB": "\u0412\u044f\u043b\u0456\u043a\u0430\u0431\u0440\u044b\u0442\u0430\u043d\u0456\u044f", "GA": "\u0413\u0430\u0431\u043e\u043d", "HT": "\u0413\u0430\u0456\u0446\u0456", "GM": "\u0413\u0430\u043c\u0431\u0456\u044f", "GH": "\u0413\u0430\u043d\u0430", "HN": "\u0413\u0430\u043d\u0434\u0443\u0440\u0430\u0441", "HK": "\u0413\u0430\u043d\u043a\u043e\u043d\u0433, \u0421\u0410\u0420 (\u041a\u0456\u0442\u0430\u0439)", "GY": "\u0413\u0430\u044f\u043d\u0430", "GP": "\u0413\u0432\u0430\u0434\u044d\u043b\u0443\u043f\u0430", "GT": "\u0413\u0432\u0430\u0442\u044d\u043c\u0430\u043b\u0430", "GN": "\u0413\u0432\u0456\u043d\u0435\u044f", "GW": "\u0413\u0432\u0456\u043d\u0435\u044f-\u0411\u0456\u0441\u0430\u0443", "DE": "\u0413\u0435\u0440\u043c\u0430\u043d\u0456\u044f", "GG": "\u0413\u0435\u0440\u043d\u0441\u0456", "GI": "\u0413\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440", "GE": "\u0413\u0440\u0443\u0437\u0456\u044f", "GD": "\u0413\u0440\u044d\u043d\u0430\u0434\u0430", "GL": "\u0413\u0440\u044d\u043d\u043b\u0430\u043d\u0434\u044b\u044f", "GR": "\u0413\u0440\u044d\u0446\u044b\u044f", "GU": "\u0413\u0443\u0430\u043c", "DM": "\u0414\u0430\u043c\u0456\u043d\u0456\u043a\u0430", "DO": "\u0414\u0430\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u044d\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", "DK": "\u0414\u0430\u043d\u0456\u044f", "DJ": "\u0414\u0436\u044b\u0431\u0443\u0446\u0456", "EG": "\u0415\u0433\u0456\u043f\u0435\u0442", "YE": "\u0415\u043c\u0435\u043d", "ZM": "\u0417\u0430\u043c\u0431\u0456\u044f", "EH": "\u0417\u0430\u0445\u043e\u0434\u043d\u044f\u044f \u0421\u0430\u0445\u0430\u0440\u0430", "ZW": "\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u044d", "US": "\u0417\u043b\u0443\u0447\u0430\u043d\u044b\u044f \u0428\u0442\u0430\u0442\u044b", "JO": "\u0406\u0430\u0440\u0434\u0430\u043d\u0456\u044f", "IL": "\u0406\u0437\u0440\u0430\u0456\u043b\u044c", "ID": "\u0406\u043d\u0434\u0430\u043d\u0435\u0437\u0456\u044f", "IN": "\u0406\u043d\u0434\u044b\u044f", "IQ": "\u0406\u0440\u0430\u043a", "IR": "\u0406\u0440\u0430\u043d", "IE": "\u0406\u0440\u043b\u0430\u043d\u0434\u044b\u044f", "IS": "\u0406\u0441\u043b\u0430\u043d\u0434\u044b\u044f", "ES": "\u0406\u0441\u043f\u0430\u043d\u0456\u044f", "IT": "\u0406\u0442\u0430\u043b\u0456\u044f", "CV": "\u041a\u0430\u0431\u0430-\u0412\u0435\u0440\u0434\u044d", "KZ": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "KY": "\u041a\u0430\u0439\u043c\u0430\u043d\u0430\u0432\u044b \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "CC": "\u041a\u0430\u043a\u043e\u0441\u0430\u0432\u044b\u044f (\u041a\u0456\u043b\u0456\u043d\u0433) \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "CO": "\u041a\u0430\u043b\u0443\u043c\u0431\u0456\u044f", "KH": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "CM": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "KM": "\u041a\u0430\u043c\u043e\u0440\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "CA": "\u041a\u0430\u043d\u0430\u0434\u0430", "BQ": "\u041a\u0430\u0440\u044b\u0431\u0441\u043a\u0456\u044f \u041d\u0456\u0434\u044d\u0440\u043b\u0430\u043d\u0434\u044b", "QA": "\u041a\u0430\u0442\u0430\u0440", "KE": "\u041a\u0435\u043d\u0456\u044f", "CY": "\u041a\u0456\u043f\u0440", "KI": "\u041a\u0456\u0440\u044b\u0431\u0430\u0446\u0456", "CN": "\u041a\u0456\u0442\u0430\u0439", "CG": "\u041a\u043e\u043d\u0433\u0430 - \u0411\u0440\u0430\u0437\u0430\u0432\u0456\u043b\u044c", "CD": "\u041a\u043e\u043d\u0433\u0430 (\u041a\u0456\u043d\u0448\u0430\u0441\u0430)", "CR": "\u041a\u043e\u0441\u0442\u0430-\u0420\u044b\u043a\u0430", "CI": "\u041a\u043e\u0442-\u0434\u2019\u0406\u0432\u0443\u0430\u0440", "CU": "\u041a\u0443\u0431\u0430", "KW": "\u041a\u0443\u0432\u0435\u0439\u0442", "KG": "\u041a\u044b\u0440\u0433\u044b\u0437\u0441\u0442\u0430\u043d", "CW": "\u041a\u044e\u0440\u0430\u0441\u0430\u0430", "LA": "\u041b\u0430\u043e\u0441", "LV": "\u041b\u0430\u0442\u0432\u0456\u044f", "LS": "\u041b\u0435\u0441\u043e\u0442\u0430", "LR": "\u041b\u0456\u0431\u0435\u0440\u044b\u044f", "LB": "\u041b\u0456\u0432\u0430\u043d", "LY": "\u041b\u0456\u0432\u0456\u044f", "LT": "\u041b\u0456\u0442\u0432\u0430", "LI": "\u041b\u0456\u0445\u0442\u044d\u043d\u0448\u0442\u044d\u0439\u043d", "LU": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "MM": "\u041c\u2019\u044f\u043d\u043c\u0430 (\u0411\u0456\u0440\u043c\u0430)", "MG": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "YT": "\u041c\u0430\u0451\u0442\u0430", "MZ": "\u041c\u0430\u0437\u0430\u043c\u0431\u0456\u043a", "MO": "\u041c\u0430\u043a\u0430\u0430, \u0421\u0410\u0420 (\u041a\u0456\u0442\u0430\u0439)", "MW": "\u041c\u0430\u043b\u0430\u0432\u0456", "MY": "\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u044f", "MD": "\u041c\u0430\u043b\u0434\u043e\u0432\u0430", "ML": "\u041c\u0430\u043b\u0456", "MV": "\u041c\u0430\u043b\u044c\u0434\u044b\u0432\u044b", "MT": "\u041c\u0430\u043b\u044c\u0442\u0430", "MC": "\u041c\u0430\u043d\u0430\u043a\u0430", "MN": "\u041c\u0430\u043d\u0433\u043e\u043b\u0456\u044f", "MS": "\u041c\u0430\u043d\u0442\u0441\u0435\u0440\u0430\u0442", "MA": "\u041c\u0430\u0440\u043e\u043a\u0430", "MQ": "\u041c\u0430\u0440\u0446\u0456\u043d\u0456\u043a\u0430", "MU": "\u041c\u0430\u045e\u0440\u044b\u043a\u0456\u0439", "MR": "\u041c\u0430\u045e\u0440\u044b\u0442\u0430\u043d\u0456\u044f", "MX": "\u041c\u0435\u043a\u0441\u0456\u043a\u0430", "NA": "\u041d\u0430\u043c\u0456\u0431\u0456\u044f", "NO": "\u041d\u0430\u0440\u0432\u0435\u0433\u0456\u044f", "NR": "\u041d\u0430\u0443\u0440\u0443", "NP": "\u041d\u0435\u043f\u0430\u043b", "NE": "\u041d\u0456\u0433\u0435\u0440", "NG": "\u041d\u0456\u0433\u0435\u0440\u044b\u044f", "NL": "\u041d\u0456\u0434\u044d\u0440\u043b\u0430\u043d\u0434\u044b", "NI": "\u041d\u0456\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "NU": "\u041d\u0456\u0443\u044d", "NZ": "\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u044b\u044f", "NC": "\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0456\u044f", "PK": "\u041f\u0430\u043a\u0456\u0441\u0442\u0430\u043d", "PW": "\u041f\u0430\u043b\u0430\u0443", "PA": "\u041f\u0430\u043d\u0430\u043c\u0430", "PG": "\u041f\u0430\u043f\u0443\u0430-\u041d\u043e\u0432\u0430\u044f \u0413\u0432\u0456\u043d\u0435\u044f", "PY": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "PT": "\u041f\u0430\u0440\u0442\u0443\u0433\u0430\u043b\u0456\u044f", "ZA": "\u041f\u0430\u045e\u0434\u043d\u0451\u0432\u0430-\u0410\u0444\u0440\u044b\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u044d\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", "GS": "\u041f\u0430\u045e\u0434\u043d\u0451\u0432\u0430\u044f \u0413\u0435\u043e\u0440\u0433\u0456\u044f \u0456 \u041f\u0430\u045e\u0434\u043d\u0451\u0432\u044b\u044f \u0421\u0430\u043d\u0434\u0432\u0456\u0447\u0430\u0432\u044b \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "KR": "\u041f\u0430\u045e\u0434\u043d\u0451\u0432\u0430\u044f \u041a\u0430\u0440\u044d\u044f", "SS": "\u041f\u0430\u045e\u0434\u043d\u0451\u0432\u044b \u0421\u0443\u0434\u0430\u043d", "KP": "\u041f\u0430\u045e\u043d\u043e\u0447\u043d\u0430\u044f \u041a\u0430\u0440\u044d\u044f", "MK": "\u041f\u0430\u045e\u043d\u043e\u0447\u043d\u0430\u044f \u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f", "PE": "\u041f\u0435\u0440\u0443", "PL": "\u041f\u043e\u043b\u044c\u0448\u0447\u0430", "PR": "\u041f\u0443\u044d\u0440\u0442\u0430-\u0420\u044b\u043a\u0430", "RU": "\u0420\u0430\u0441\u0456\u044f", "RW": "\u0420\u0443\u0430\u043d\u0434\u0430", "RO": "\u0420\u0443\u043c\u044b\u043d\u0456\u044f", "RE": "\u0420\u044d\u044e\u043d\u044c\u0451\u043d", "SB": "\u0421\u0430\u043b\u0430\u043c\u043e\u043d\u0430\u0432\u044b \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "SV": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "SO": "\u0421\u0430\u043c\u0430\u043b\u0456", "WS": "\u0421\u0430\u043c\u043e\u0430", "SM": "\u0421\u0430\u043d-\u041c\u0430\u0440\u044b\u043d\u0430", "ST": "\u0421\u0430\u043d-\u0422\u0430\u043c\u044d \u0456 \u041f\u0440\u044b\u043d\u0441\u0456\u043f\u0456", "SA": "\u0421\u0430\u0443\u0434\u0430\u045e\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0456\u044f", "SC": "\u0421\u0435\u0439\u0448\u044d\u043b\u044c\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "BL": "\u0421\u0435\u043d-\u0411\u0430\u0440\u0442\u044d\u043b\u044c\u043c\u0456", "MF": "\u0421\u0435\u043d-\u041c\u0430\u0440\u0442\u044d\u043d", "PM": "\u0421\u0435\u043d-\u041f\u2019\u0435\u0440 \u0456 \u041c\u0456\u043a\u0435\u043b\u043e\u043d", "SN": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "VC": "\u0421\u0435\u043d\u0442-\u0412\u0456\u043d\u0441\u0435\u043d\u0442 \u0456 \u0413\u0440\u044d\u043d\u0430\u0434\u0437\u0456\u043d\u044b", "KN": "\u0421\u0435\u043d\u0442-\u041a\u0456\u0442\u0441 \u0456 \u041d\u0435\u0432\u0456\u0441", "LC": "\u0421\u0435\u043d\u0442-\u041b\u044e\u0441\u0456\u044f", "RS": "\u0421\u0435\u0440\u0431\u0456\u044f", "SG": "\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440", "SX": "\u0421\u0456\u043d\u0442-\u041c\u0430\u0440\u0442\u044d\u043d", "SY": "\u0421\u0456\u0440\u044b\u044f", "SK": "\u0421\u043b\u0430\u0432\u0430\u043a\u0456\u044f", "SI": "\u0421\u043b\u0430\u0432\u0435\u043d\u0456\u044f", "SD": "\u0421\u0443\u0434\u0430\u043d", "SR": "\u0421\u0443\u0440\u044b\u043d\u0430\u043c", "SL": "\u0421\u044c\u0435\u0440\u0430-\u041b\u0435\u043e\u043d\u044d", "TJ": "\u0422\u0430\u0434\u0436\u044b\u043a\u0456\u0441\u0442\u0430\u043d", "TW": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "TH": "\u0422\u0430\u0439\u043b\u0430\u043d\u0434", "TK": "\u0422\u0430\u043a\u0435\u043b\u0430\u0443", "TZ": "\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u044f", "TG": "\u0422\u043e\u0433\u0430", "TO": "\u0422\u043e\u043d\u0433\u0430", "TT": "\u0422\u0440\u044b\u043d\u0456\u0434\u0430\u0434 \u0456 \u0422\u0430\u0431\u0430\u0433\u0430", "TN": "\u0422\u0443\u043d\u0456\u0441", "TM": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0456\u0441\u0442\u0430\u043d", "TR": "\u0422\u0443\u0440\u0446\u044b\u044f", "TL": "\u0422\u044b\u043c\u043e\u0440-\u041b\u0435\u0448\u0446\u0456", "UG": "\u0423\u0433\u0430\u043d\u0434\u0430", "UZ": "\u0423\u0437\u0431\u0435\u043a\u0456\u0441\u0442\u0430\u043d", "UA": "\u0423\u043a\u0440\u0430\u0456\u043d\u0430", "WF": "\u0423\u043e\u043b\u0456\u0441 \u0456 \u0424\u0443\u0442\u0443\u043d\u0430", "UY": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "FK": "\u0424\u0430\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "FO": "\u0424\u0430\u0440\u044d\u0440\u0441\u043a\u0456\u044f \u0430\u0441\u0442\u0440\u0430\u0432\u044b", "FJ": "\u0424\u0456\u0434\u0436\u044b", "PH": "\u0424\u0456\u043b\u0456\u043f\u0456\u043d\u044b", "FI": "\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u044b\u044f", "GF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0430\u044f \u0413\u0432\u0456\u044f\u043d\u0430", "PF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0430\u044f \u041f\u0430\u043b\u0456\u043d\u0435\u0437\u0456\u044f", "TF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0456\u044f \u043f\u0430\u045e\u0434\u043d\u0451\u0432\u044b\u044f \u0442\u044d\u0440\u044b\u0442\u043e\u0440\u044b\u0456", "FR": "\u0424\u0440\u0430\u043d\u0446\u044b\u044f", "HR": "\u0425\u0430\u0440\u0432\u0430\u0442\u044b\u044f", "CF": "\u0426\u044d\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430-\u0410\u0444\u0440\u044b\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u044d\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", "TD": "\u0427\u0430\u0434", "ME": "\u0427\u0430\u0440\u043d\u0430\u0433\u043e\u0440\u044b\u044f", "CL": "\u0427\u044b\u043b\u0456", "CZ": "\u0427\u044d\u0445\u0456\u044f", "CH": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u044b\u044f", "SE": "\u0428\u0432\u0435\u0446\u044b\u044f", "SJ": "\u0428\u043f\u0456\u0446\u0431\u0435\u0440\u0433\u0435\u043d \u0456 \u042f\u043d-\u041c\u0430\u0435\u043d", "LK": "\u0428\u0440\u044b-\u041b\u0430\u043d\u043a\u0430", "EC": "\u042d\u043a\u0432\u0430\u0434\u043e\u0440", "GQ": "\u042d\u043a\u0432\u0430\u0442\u0430\u0440\u044b\u044f\u043b\u044c\u043d\u0430\u044f \u0413\u0432\u0456\u043d\u0435\u044f", "ER": "\u042d\u0440\u044b\u0442\u0440\u044d\u044f", "SZ": "\u042d\u0441\u0432\u0430\u0442\u044b\u043d\u0456", "EE": "\u042d\u0441\u0442\u043e\u043d\u0456\u044f", "ET": "\u042d\u0444\u0456\u043e\u043f\u0456\u044f", "JM": "\u042f\u043c\u0430\u0439\u043a\u0430", "JP": "\u042f\u043f\u043e\u043d\u0456\u044f"}onionshare-2.6.3/desktop/onionshare/resources/countries/bg.json000066400000000000000000000373431475545702100250410ustar00rootroot00000000000000{"AU": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "AT": "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "AZ": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "AL": "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "DZ": "\u0410\u043b\u0436\u0438\u0440", "AS": "\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0421\u0430\u043c\u043e\u0430", "VI": "\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438 \u0412\u0438\u0440\u0434\u0436\u0438\u043d\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "AO": "\u0410\u043d\u0433\u043e\u043b\u0430", "AI": "\u0410\u043d\u0433\u0443\u0438\u043b\u0430", "AD": "\u0410\u043d\u0434\u043e\u0440\u0430", "AQ": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430", "AG": "\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0438 \u0411\u0430\u0440\u0431\u0443\u0434\u0430", "AR": "\u0410\u0440\u0436\u0435\u043d\u0442\u0438\u043d\u0430", "AM": "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "AW": "\u0410\u0440\u0443\u0431\u0430", "AF": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "BD": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "BB": "\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441", "BS": "\u0411\u0430\u0445\u0430\u043c\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "BH": "\u0411\u0430\u0445\u0440\u0435\u0439\u043d", "BY": "\u0411\u0435\u043b\u0430\u0440\u0443\u0441", "BE": "\u0411\u0435\u043b\u0433\u0438\u044f", "BZ": "\u0411\u0435\u043b\u0438\u0437", "BJ": "\u0411\u0435\u043d\u0438\u043d", "BM": "\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "BO": "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "BA": "\u0411\u043e\u0441\u043d\u0430 \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "BW": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "BR": "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "IO": "\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0438\u044f \u0432 \u0418\u043d\u0434\u0438\u0439\u0441\u043a\u0438\u044f \u043e\u043a\u0435\u0430\u043d", "VG": "\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0438 \u0412\u0438\u0440\u0434\u0436\u0438\u043d\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "BN": "\u0411\u0440\u0443\u043d\u0435\u0439 \u0414\u0430\u0440\u0443\u0441\u0441\u0430\u043b\u0430\u043c", "BF": "\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e", "BI": "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "BT": "\u0411\u0443\u0442\u0430\u043d", "BG": "\u0411\u044a\u043b\u0433\u0430\u0440\u0438\u044f", "VU": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "VA": "\u0412\u0430\u0442\u0438\u043a\u0430\u043d", "VE": "\u0412\u0435\u043d\u0435\u0446\u0443\u0435\u043b\u0430", "VN": "\u0412\u0438\u0435\u0442\u043d\u0430\u043c", "GA": "\u0413\u0430\u0431\u043e\u043d", "GM": "\u0413\u0430\u043c\u0431\u0438\u044f", "GH": "\u0413\u0430\u043d\u0430", "GY": "\u0413\u0430\u044f\u043d\u0430", "GP": "\u0413\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0430", "GT": "\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "GN": "\u0413\u0432\u0438\u043d\u0435\u044f", "GW": "\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443", "DE": "\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f", "GI": "\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440", "GD": "\u0413\u0440\u0435\u043d\u0430\u0434\u0430", "GL": "\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "GE": "\u0413\u0440\u0443\u0437\u0438\u044f", "GU": "\u0413\u0443\u0430\u043c", "GG": "\u0413\u044a\u0440\u043d\u0437\u0438", "GR": "\u0413\u044a\u0440\u0446\u0438\u044f", "DK": "\u0414\u0430\u043d\u0438\u044f", "DJ": "\u0414\u0436\u0438\u0431\u0443\u0442\u0438", "DM": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430", "DO": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "EG": "\u0415\u0433\u0438\u043f\u0435\u0442", "EC": "\u0415\u043a\u0432\u0430\u0434\u043e\u0440", "GQ": "\u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u043d\u0430 \u0413\u0432\u0438\u043d\u0435\u044f", "ER": "\u0415\u0440\u0438\u0442\u0440\u0435\u044f", "SZ": "\u0415\u0441\u0432\u0430\u0442\u0438\u043d\u0438", "EE": "\u0415\u0441\u0442\u043e\u043d\u0438\u044f", "ET": "\u0415\u0442\u0438\u043e\u043f\u0438\u044f", "ZM": "\u0417\u0430\u043c\u0431\u0438\u044f", "EH": "\u0417\u0430\u043f\u0430\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430", "ZW": "\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435", "IL": "\u0418\u0437\u0440\u0430\u0435\u043b", "TL": "\u0418\u0437\u0442\u043e\u0447\u0435\u043d \u0422\u0438\u043c\u043e\u0440", "IN": "\u0418\u043d\u0434\u0438\u044f", "ID": "\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f", "IQ": "\u0418\u0440\u0430\u043a", "IR": "\u0418\u0440\u0430\u043d", "IE": "\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f", "IS": "\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f", "ES": "\u0418\u0441\u043f\u0430\u043d\u0438\u044f", "IT": "\u0418\u0442\u0430\u043b\u0438\u044f", "YE": "\u0419\u0435\u043c\u0435\u043d", "JO": "\u0419\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "CV": "\u041a\u0430\u0431\u043e \u0412\u0435\u0440\u0434\u0435", "KZ": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "KY": "\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "KH": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "CM": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "CA": "\u041a\u0430\u043d\u0430\u0434\u0430", "BQ": "\u041a\u0430\u0440\u0438\u0431\u0441\u043a\u0430 \u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438\u044f", "QA": "\u041a\u0430\u0442\u0430\u0440", "KE": "\u041a\u0435\u043d\u0438\u044f", "CY": "\u041a\u0438\u043f\u044a\u0440", "KG": "\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u0442\u0430\u043d", "KI": "\u041a\u0438\u0440\u0438\u0431\u0430\u0442\u0438", "CN": "\u041a\u0438\u0442\u0430\u0439", "CC": "\u041a\u043e\u043a\u043e\u0441\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438 (\u043e\u0441\u0442\u0440\u043e\u0432\u0438 \u041a\u0438\u0439\u043b\u0438\u043d\u0433)", "CO": "\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f", "KM": "\u041a\u043e\u043c\u043e\u0440\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "CG": "\u041a\u043e\u043d\u0433\u043e (\u0411\u0440\u0430\u0437\u0430\u0432\u0438\u043b)", "CD": "\u041a\u043e\u043d\u0433\u043e (\u041a\u0438\u043d\u0448\u0430\u0441\u0430)", "CR": "\u041a\u043e\u0441\u0442\u0430 \u0420\u0438\u043a\u0430", "CI": "\u041a\u043e\u0442 \u0434\u2019\u0418\u0432\u043e\u0430\u0440", "CU": "\u041a\u0443\u0431\u0430", "KW": "\u041a\u0443\u0432\u0435\u0439\u0442", "CW": "\u041a\u044e\u0440\u0430\u0441\u0430\u043e", "LA": "\u041b\u0430\u043e\u0441", "LV": "\u041b\u0430\u0442\u0432\u0438\u044f", "LS": "\u041b\u0435\u0441\u043e\u0442\u043e", "LR": "\u041b\u0438\u0431\u0435\u0440\u0438\u044f", "LY": "\u041b\u0438\u0431\u0438\u044f", "LB": "\u041b\u0438\u0432\u0430\u043d", "LT": "\u041b\u0438\u0442\u0432\u0430", "LI": "\u041b\u0438\u0445\u0442\u0435\u043d\u0449\u0430\u0439\u043d", "LU": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "MR": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "MU": "\u041c\u0430\u0432\u0440\u0438\u0446\u0438\u0439", "MG": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "YT": "\u041c\u0430\u0439\u043e\u0442", "MO": "\u041c\u0430\u043a\u0430\u043e, \u0421\u0410\u0420 \u043d\u0430 \u041a\u0438\u0442\u0430\u0439", "MW": "\u041c\u0430\u043b\u0430\u0432\u0438", "MY": "\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f", "MV": "\u041c\u0430\u043b\u0434\u0438\u0432\u0438", "ML": "\u041c\u0430\u043b\u0438", "MT": "\u041c\u0430\u043b\u0442\u0430", "MA": "\u041c\u0430\u0440\u043e\u043a\u043e", "MQ": "\u041c\u0430\u0440\u0442\u0438\u043d\u0438\u043a\u0430", "MX": "\u041c\u0435\u043a\u0441\u0438\u043a\u043e", "MM": "\u041c\u0438\u0430\u043d\u043c\u0430\u0440 (\u0411\u0438\u0440\u043c\u0430)", "MZ": "\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a", "MD": "\u041c\u043e\u043b\u0434\u043e\u0432\u0430", "MC": "\u041c\u043e\u043d\u0430\u043a\u043e", "MN": "\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f", "MS": "\u041c\u043e\u043d\u0442\u0441\u0435\u0440\u0430\u0442", "NA": "\u041d\u0430\u043c\u0438\u0431\u0438\u044f", "NR": "\u041d\u0430\u0443\u0440\u0443", "NP": "\u041d\u0435\u043f\u0430\u043b", "NE": "\u041d\u0438\u0433\u0435\u0440", "NG": "\u041d\u0438\u0433\u0435\u0440\u0438\u044f", "NL": "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438\u044f", "NI": "\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "NU": "\u041d\u0438\u0443\u0435", "NZ": "\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f", "NC": "\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f", "NO": "\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f", "AE": "\u041e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0430\u0440\u0430\u0431\u0441\u043a\u0438 \u0435\u043c\u0438\u0440\u0441\u0442\u0432\u0430", "GB": "\u041e\u0431\u0435\u0434\u0438\u043d\u0435\u043d\u043e\u0442\u043e \u043a\u0440\u0430\u043b\u0441\u0442\u0432\u043e", "AX": "\u041e\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "OM": "\u041e\u043c\u0430\u043d", "BV": "\u043e\u0441\u0442\u0440\u043e\u0432 \u0411\u0443\u0432\u0435", "IM": "\u043e\u0441\u0442\u0440\u043e\u0432 \u041c\u0430\u043d", "NF": "\u043e\u0441\u0442\u0440\u043e\u0432 \u041d\u043e\u0440\u0444\u043e\u043b\u043a", "CX": "\u043e\u0441\u0442\u0440\u043e\u0432 \u0420\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u043e", "CK": "\u043e\u0441\u0442\u0440\u043e\u0432\u0438 \u041a\u0443\u043a", "PN": "\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041f\u0438\u0442\u043a\u0435\u0440\u043d", "TC": "\u043e\u0441\u0442\u0440\u043e\u0432\u0438 \u0422\u044a\u0440\u043a\u0441 \u0438 \u041a\u0430\u0439\u043a\u043e\u0441", "HM": "\u043e\u0441\u0442\u0440\u043e\u0432\u0438 \u0425\u044a\u0440\u0434 \u0438 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u0434", "PK": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "PW": "\u041f\u0430\u043b\u0430\u0443", "PA": "\u041f\u0430\u043d\u0430\u043c\u0430", "PG": "\u041f\u0430\u043f\u0443\u0430-\u041d\u043e\u0432\u0430 \u0413\u0432\u0438\u043d\u0435\u044f", "PY": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "PE": "\u041f\u0435\u0440\u0443", "PL": "\u041f\u043e\u043b\u0448\u0430", "PT": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f", "PR": "\u041f\u0443\u0435\u0440\u0442\u043e \u0420\u0438\u043a\u043e", "RE": "\u0420\u0435\u044e\u043d\u0438\u043e\u043d", "RW": "\u0420\u0443\u0430\u043d\u0434\u0430", "RO": "\u0420\u0443\u043c\u044a\u043d\u0438\u044f", "RU": "\u0420\u0443\u0441\u0438\u044f", "SV": "\u0421\u0430\u043b\u0432\u0430\u0434\u043e\u0440", "WS": "\u0421\u0430\u043c\u043e\u0430", "SM": "\u0421\u0430\u043d \u041c\u0430\u0440\u0438\u043d\u043e", "ST": "\u0421\u0430\u043e \u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0441\u0438\u043f\u0438", "SA": "\u0421\u0430\u0443\u0434\u0438\u0442\u0441\u043a\u0430 \u0410\u0440\u0430\u0431\u0438\u044f", "SJ": "\u0421\u0432\u0430\u043b\u0431\u0430\u0440\u0434 \u0438 \u042f\u043d \u041c\u0430\u0439\u0435\u043d", "SH": "\u0421\u0432\u0435\u0442\u0430 \u0415\u043b\u0435\u043d\u0430", "KP": "\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u041a\u043e\u0440\u0435\u044f", "MK": "\u0421\u0435\u0432\u0435\u0440\u043d\u0430 \u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f", "VC": "\u0421\u0435\u0439\u043d\u0442 \u0412\u0438\u043d\u0441\u044a\u043d\u0442 \u0438 \u0413\u0440\u0435\u043d\u0430\u0434\u0438\u043d\u0438", "KN": "\u0421\u0435\u0439\u043d\u0442 \u041a\u0438\u0442\u0441 \u0438 \u041d\u0435\u0432\u0438\u0441", "LC": "\u0421\u0435\u0439\u043d\u0442 \u041b\u0443\u0441\u0438\u044f", "SC": "\u0421\u0435\u0439\u0448\u0435\u043b\u0438", "BL": "\u0421\u0435\u043d \u0411\u0430\u0440\u0442\u0435\u043b\u0435\u043c\u0438", "MF": "\u0421\u0435\u043d \u041c\u0430\u0440\u0442\u0435\u043d", "PM": "\u0421\u0435\u043d \u041f\u0438\u0435\u0440 \u0438 \u041c\u0438\u043a\u0435\u043b\u043e\u043d", "SN": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "SL": "\u0421\u0438\u0435\u0440\u0430 \u041b\u0435\u043e\u043d\u0435", "SG": "\u0421\u0438\u043d\u0433\u0430\u043f\u0443\u0440", "SX": "\u0421\u0438\u043d\u0442 \u041c\u0430\u0440\u0442\u0435\u043d", "SY": "\u0421\u0438\u0440\u0438\u044f", "SK": "\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f", "SI": "\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f", "SB": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "SO": "\u0421\u043e\u043c\u0430\u043b\u0438\u044f", "SD": "\u0421\u0443\u0434\u0430\u043d", "SR": "\u0421\u0443\u0440\u0438\u043d\u0430\u043c", "US": "\u0421\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438 \u0449\u0430\u0442\u0438", "RS": "\u0421\u044a\u0440\u0431\u0438\u044f", "TJ": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "TW": "\u0422\u0430\u0439\u0432\u0430\u043d", "TH": "\u0422\u0430\u0439\u043b\u0430\u043d\u0434", "TZ": "\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f", "TG": "\u0422\u043e\u0433\u043e", "TK": "\u0422\u043e\u043a\u0435\u043b\u0430\u0443", "TO": "\u0422\u043e\u043d\u0433\u0430", "TT": "\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e", "TN": "\u0422\u0443\u043d\u0438\u0441", "TM": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d", "TR": "\u0422\u0443\u0440\u0446\u0438\u044f", "UG": "\u0423\u0433\u0430\u043d\u0434\u0430", "UZ": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "UA": "\u0423\u043a\u0440\u0430\u0439\u043d\u0430", "HU": "\u0423\u043d\u0433\u0430\u0440\u0438\u044f", "WF": "\u0423\u043e\u043b\u0438\u0441 \u0438 \u0424\u0443\u0442\u0443\u043d\u0430", "UY": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "FO": "\u0424\u0430\u0440\u044c\u043e\u0440\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "FJ": "\u0424\u0438\u0434\u0436\u0438", "PH": "\u0424\u0438\u043b\u0438\u043f\u0438\u043d\u0438", "FI": "\u0424\u0438\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "FK": "\u0424\u043e\u043b\u043a\u043b\u0430\u043d\u0434\u0441\u043a\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "FR": "\u0424\u0440\u0430\u043d\u0446\u0438\u044f", "GF": "\u0424\u0440\u0435\u043d\u0441\u043a\u0430 \u0413\u0432\u0438\u0430\u043d\u0430", "PF": "\u0424\u0440\u0435\u043d\u0441\u043a\u0430 \u041f\u043e\u043b\u0438\u043d\u0435\u0437\u0438\u044f", "TF": "\u0424\u0440\u0435\u043d\u0441\u043a\u0438 \u044e\u0436\u043d\u0438 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0438\u0438", "HT": "\u0425\u0430\u0438\u0442\u0438", "HN": "\u0425\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "HK": "\u0425\u043e\u043d\u043a\u043e\u043d\u0433, \u0421\u0410\u0420 \u043d\u0430 \u041a\u0438\u0442\u0430\u0439", "HR": "\u0425\u044a\u0440\u0432\u0430\u0442\u0438\u044f", "CF": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430 \u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "TD": "\u0427\u0430\u0434", "ME": "\u0427\u0435\u0440\u043d\u0430 \u0433\u043e\u0440\u0430", "CZ": "\u0427\u0435\u0445\u0438\u044f", "CL": "\u0427\u0438\u043b\u0438", "CH": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f", "SE": "\u0428\u0432\u0435\u0446\u0438\u044f", "LK": "\u0428\u0440\u0438 \u041b\u0430\u043d\u043a\u0430", "SS": "\u042e\u0436\u0435\u043d \u0421\u0443\u0434\u0430\u043d", "ZA": "\u042e\u0436\u043d\u0430 \u0410\u0444\u0440\u0438\u043a\u0430", "GS": "\u042e\u0436\u043d\u0430 \u0414\u0436\u043e\u0440\u0434\u0436\u0438\u044f \u0438 \u042e\u0436\u043d\u0438 \u0421\u0430\u043d\u0434\u0432\u0438\u0447\u0435\u0432\u0438 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "KR": "\u042e\u0436\u043d\u0430 \u041a\u043e\u0440\u0435\u044f", "JM": "\u042f\u043c\u0430\u0439\u043a\u0430", "JP": "\u042f\u043f\u043e\u043d\u0438\u044f"}onionshare-2.6.3/desktop/onionshare/resources/countries/bn.json000066400000000000000000000420251475545702100250410ustar00rootroot00000000000000{"AT": "\u0985\u09b8\u09cd\u099f\u09cd\u09b0\u09bf\u09af\u09bc\u09be", "AU": "\u0985\u09b8\u09cd\u099f\u09cd\u09b0\u09c7\u09b2\u09bf\u09af\u09bc\u09be", "AO": "\u0985\u09cd\u09af\u09be\u0999\u09cd\u0997\u09cb\u09b2\u09be", "AQ": "\u0985\u09cd\u09af\u09be\u09a8\u09cd\u099f\u09be\u09b0\u09cd\u0995\u099f\u09bf\u0995\u09be", "AG": "\u0985\u09cd\u09af\u09be\u09a8\u09cd\u099f\u09bf\u0997\u09c1\u09af\u09bc\u09be \u0993 \u09ac\u09be\u09b0\u09ac\u09c1\u09a1\u09be", "IM": "\u0986\u0987\u09b2 \u0985\u09ab \u09ae\u09cd\u09af\u09be\u09a8", "IS": "\u0986\u0987\u09b8\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "AZ": "\u0986\u099c\u09be\u09b0\u09ac\u09be\u0987\u099c\u09be\u09a8", "AD": "\u0986\u09a8\u09cd\u09a1\u09cb\u09b0\u09be", "AF": "\u0986\u09ab\u0997\u09be\u09a8\u09bf\u09b8\u09cd\u09a4\u09be\u09a8", "AS": "\u0986\u09ae\u09c7\u09b0\u09bf\u0995\u09be\u09a8 \u09b8\u09be\u09ae\u09cb\u09af\u09bc\u09be", "IE": "\u0986\u09af\u09bc\u09be\u09b0\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "AW": "\u0986\u09b0\u09c1\u09ac\u09be", "AR": "\u0986\u09b0\u09cd\u099c\u09c7\u09a8\u09cd\u099f\u09bf\u09a8\u09be", "AM": "\u0986\u09b0\u09cd\u09ae\u09c7\u09a8\u09bf\u09af\u09bc\u09be", "DZ": "\u0986\u09b2\u099c\u09c7\u09b0\u09bf\u09af\u09bc\u09be", "AL": "\u0986\u09b2\u09ac\u09c7\u09a8\u09bf\u09af\u09bc\u09be", "AX": "\u0986\u09b2\u09be\u09a8\u09cd\u09a1 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "UA": "\u0987\u0989\u0995\u09cd\u09b0\u09c7\u09a8", "EC": "\u0987\u0995\u09c1\u09af\u09bc\u09c7\u09a1\u09b0", "IL": "\u0987\u099c\u09b0\u09be\u09af\u09bc\u09c7\u09b2", "IT": "\u0987\u09a4\u09be\u09b2\u09bf", "ET": "\u0987\u09a5\u09bf\u0993\u09aa\u09bf\u09af\u09bc\u09be", "ID": "\u0987\u09a8\u09cd\u09a6\u09cb\u09a8\u09c7\u09b6\u09bf\u09af\u09bc\u09be", "YE": "\u0987\u09af\u09bc\u09c7\u09ae\u09c7\u09a8", "IQ": "\u0987\u09b0\u09be\u0995", "IR": "\u0987\u09b0\u09be\u09a8", "ER": "\u0987\u09b0\u09bf\u09a4\u09cd\u09b0\u09bf\u09af\u09bc\u09be", "SZ": "\u0987\u09b8\u0993\u09af\u09bc\u09be\u09a4\u09bf\u09a8\u09bf", "UG": "\u0989\u0997\u09be\u09a8\u09cd\u09a1\u09be", "UZ": "\u0989\u099c\u09ac\u09c7\u0995\u09bf\u09b8\u09cd\u09a4\u09be\u09a8", "KP": "\u0989\u09a4\u09cd\u09a4\u09b0 \u0995\u09cb\u09b0\u09bf\u09af\u09bc\u09be", "MK": "\u0989\u09a4\u09cd\u09a4\u09b0 \u09ae\u09cd\u09af\u09be\u09b8\u09c7\u09a1\u09cb\u09a8\u09bf\u09af\u09bc\u09be", "UY": "\u0989\u09b0\u09c1\u0997\u09c1\u09af\u09bc\u09c7", "SV": "\u098f\u09b2 \u09b8\u09be\u09b2\u09ad\u09c7\u09a6\u09b0", "EE": "\u098f\u09b8\u09cd\u09a4\u09cb\u09a8\u09bf\u09af\u09bc\u09be", "AI": "\u098f\u09cd\u09af\u09be\u0999\u09cd\u0997\u09c1\u0987\u09b2\u09be", "OM": "\u0993\u09ae\u09be\u09a8", "WF": "\u0993\u09af\u09bc\u09be\u09b2\u09bf\u09b8 \u0993 \u09ab\u09c1\u099f\u09c1\u09a8\u09be", "CG": "\u0995\u0999\u09cd\u0997\u09cb - \u09ac\u09cd\u09b0\u09be\u099c\u09be\u09ad\u09bf\u09b2", "CD": "\u0995\u0999\u09cd\u0997\u09cb-\u0995\u09bf\u09a8\u09b6\u09be\u09b8\u09be", "KM": "\u0995\u09ae\u09cb\u09b0\u09cb\u09b8", "KH": "\u0995\u09ae\u09cd\u09ac\u09cb\u09a1\u09bf\u09af\u09bc\u09be", "CO": "\u0995\u09b2\u09ae\u09cd\u09ac\u09bf\u09af\u09bc\u09be", "KZ": "\u0995\u09be\u099c\u09be\u0996\u09b8\u09cd\u09a4\u09be\u09a8", "QA": "\u0995\u09be\u09a4\u09be\u09b0", "CA": "\u0995\u09be\u09a8\u09be\u09a1\u09be", "CU": "\u0995\u09bf\u0989\u09ac\u09be", "KG": "\u0995\u09bf\u09b0\u0997\u09bf\u099c\u09bf\u09b8\u09cd\u09a4\u09be\u09a8", "KI": "\u0995\u09bf\u09b0\u09bf\u09ac\u09be\u09a4\u09bf", "CK": "\u0995\u09c1\u0995 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "KW": "\u0995\u09c1\u09af\u09bc\u09c7\u09a4", "CW": "\u0995\u09c1\u09b0\u09be\u09b8\u09be\u0993", "KE": "\u0995\u09c7\u09a8\u09bf\u09af\u09bc\u09be", "CV": "\u0995\u09c7\u09aa\u09ad\u09be\u09b0\u09cd\u09a6\u09c7", "KY": "\u0995\u09c7\u09ae\u09cd\u09af\u09be\u09a8 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "CC": "\u0995\u09cb\u0995\u09cb\u09b8 (\u0995\u09bf\u09b2\u09bf\u0982) \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "CI": "\u0995\u09cb\u09a4 \u09a6\u09bf\u09ad\u09cb\u09af\u09bc\u09be\u09b0", "CR": "\u0995\u09cb\u09b8\u09cd\u099f\u09be\u09b0\u09bf\u0995\u09be", "CM": "\u0995\u09cd\u09af\u09be\u09ae\u09c7\u09b0\u09c1\u09a8", "BQ": "\u0995\u09cd\u09af\u09be\u09b0\u09bf\u09ac\u09bf\u09af\u09bc\u09be\u09a8 \u09a8\u09c7\u09a6\u09be\u09b0\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1\u09b8", "CX": "\u0995\u09cd\u09b0\u09bf\u09b8\u09ae\u09be\u09b8 \u09a6\u09cd\u09ac\u09c0\u09aa", "HR": "\u0995\u09cd\u09b0\u09cb\u09af\u09bc\u09c7\u09b6\u09bf\u09af\u09bc\u09be", "GM": "\u0997\u09be\u09ae\u09cd\u09ac\u09bf\u09af\u09bc\u09be", "GN": "\u0997\u09bf\u09a8\u09bf", "GW": "\u0997\u09bf\u09a8\u09bf-\u09ac\u09bf\u09b8\u09be\u0989", "GY": "\u0997\u09bf\u09af\u09bc\u09be\u09a8\u09be", "GT": "\u0997\u09c1\u09af\u09bc\u09be\u09a4\u09c7\u09ae\u09be\u09b2\u09be", "GP": "\u0997\u09c1\u09af\u09bc\u09be\u09a6\u09c7\u09b2\u09cc\u09aa", "GU": "\u0997\u09c1\u09af\u09bc\u09be\u09ae", "GG": "\u0997\u09c1\u09af\u09bc\u09be\u09b0\u09cd\u09a8\u09b8\u09bf", "GA": "\u0997\u09cd\u09af\u09be\u09ac\u09a8", "GL": "\u0997\u09cd\u09b0\u09c0\u09a8\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "GR": "\u0997\u09cd\u09b0\u09c0\u09b8", "GD": "\u0997\u09cd\u09b0\u09c7\u09a8\u09be\u09a1\u09be", "GH": "\u0998\u09be\u09a8\u09be", "TD": "\u099a\u09be\u09a6", "CL": "\u099a\u09bf\u09b2\u09bf", "CN": "\u099a\u09c0\u09a8", "CZ": "\u099a\u09c7\u099a\u09bf\u09af\u09bc\u09be", "GE": "\u099c\u09b0\u09cd\u099c\u09bf\u09af\u09bc\u09be", "JO": "\u099c\u09b0\u09cd\u09a1\u09a8", "JP": "\u099c\u09be\u09aa\u09be\u09a8", "JM": "\u099c\u09be\u09ae\u09be\u0987\u0995\u09be", "ZM": "\u099c\u09be\u09ae\u09cd\u09ac\u09bf\u09af\u09bc\u09be", "DE": "\u099c\u09be\u09b0\u09cd\u09ae\u09be\u09a8\u09bf", "DJ": "\u099c\u09bf\u09ac\u09c1\u09a4\u09bf", "GI": "\u099c\u09bf\u09ac\u09cd\u09b0\u09be\u09b2\u09cd\u099f\u09be\u09b0", "ZW": "\u099c\u09bf\u09ae\u09cd\u09ac\u09be\u09ac\u09cb\u09af\u09bc\u09c7", "TK": "\u099f\u09cb\u0995\u09c7\u09b2\u09be\u0989", "TG": "\u099f\u09cb\u0997\u09cb", "TO": "\u099f\u09cb\u0999\u09cd\u0997\u09be", "DK": "\u09a1\u09c7\u09a8\u09ae\u09be\u09b0\u09cd\u0995", "DM": "\u09a1\u09cb\u09ae\u09bf\u09a8\u09bf\u0995\u09be", "DO": "\u09a1\u09cb\u09ae\u09c7\u09a8\u09bf\u0995\u09be\u09a8 \u09aa\u09cd\u09b0\u099c\u09be\u09a4\u09a8\u09cd\u09a4\u09cd\u09b0", "TW": "\u09a4\u09be\u0987\u0993\u09af\u09bc\u09be\u09a8", "TJ": "\u09a4\u09be\u099c\u09bf\u0995\u09bf\u09b8\u09cd\u09a4\u09be\u09a8", "TZ": "\u09a4\u09be\u099e\u09cd\u099c\u09be\u09a8\u09bf\u09af\u09bc\u09be", "TN": "\u09a4\u09bf\u0989\u09a8\u09bf\u09b8\u09bf\u09af\u09bc\u09be", "TL": "\u09a4\u09bf\u09ae\u09c1\u09b0-\u09b2\u09c7\u09b8\u09cd\u09a4\u09c7", "TR": "\u09a4\u09c1\u09b0\u09b8\u09cd\u0995", "TM": "\u09a4\u09c1\u09b0\u09cd\u0995\u09ae\u09c7\u09a8\u09bf\u09b8\u09cd\u09a4\u09be\u09a8", "TC": "\u09a4\u09c1\u09b0\u09cd\u0995\u09b8 \u0993 \u0995\u09be\u0987\u0995\u09cb\u09b8 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "TT": "\u09a4\u09cd\u09b0\u09bf\u09a8\u09bf\u09a8\u09be\u09a6 \u0993 \u099f\u09cb\u09ac\u09cd\u09af\u09be\u0997\u09cb", "TH": "\u09a5\u09be\u0987\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "ZA": "\u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u0986\u09ab\u09cd\u09b0\u09bf\u0995\u09be", "KR": "\u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u0995\u09cb\u09b0\u09bf\u09af\u09bc\u09be", "GS": "\u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u099c\u09b0\u09cd\u099c\u09bf\u09af\u09bc\u09be \u0993 \u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u09b8\u09cd\u09af\u09be\u09a8\u09cd\u09a1\u0989\u0987\u099a \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "SS": "\u09a6\u0995\u09cd\u09b7\u09bf\u09a3 \u09b8\u09c1\u09a6\u09be\u09a8", "NO": "\u09a8\u09b0\u0993\u09af\u09bc\u09c7", "NF": "\u09a8\u09b0\u09ab\u09cb\u0995 \u09a6\u09cd\u09ac\u09c0\u09aa", "NE": "\u09a8\u09be\u0987\u099c\u09be\u09b0", "NG": "\u09a8\u09be\u0987\u099c\u09c7\u09b0\u09bf\u09af\u09bc\u09be", "NR": "\u09a8\u09be\u0989\u09b0\u09c1", "NA": "\u09a8\u09be\u09ae\u09bf\u09ac\u09bf\u09af\u09bc\u09be", "NC": "\u09a8\u09bf\u0989 \u0995\u09cd\u09af\u09be\u09b2\u09c7\u09a1\u09cb\u09a8\u09bf\u09af\u09bc\u09be", "NZ": "\u09a8\u09bf\u0989\u099c\u09bf\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "NU": "\u09a8\u09bf\u0989\u09af\u09bc\u09c7", "NI": "\u09a8\u09bf\u0995\u09be\u09b0\u09be\u0997\u09c1\u09af\u09bc\u09be", "GQ": "\u09a8\u09bf\u09b0\u0995\u09cd\u09b7\u09c0\u09af\u09bc \u0997\u09bf\u09a8\u09bf", "NL": "\u09a8\u09c7\u09a6\u09be\u09b0\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1\u09b8", "NP": "\u09a8\u09c7\u09aa\u09be\u09b2", "PT": "\u09aa\u09b0\u09cd\u09a4\u09c1\u0997\u09be\u09b2", "EH": "\u09aa\u09b6\u09cd\u099a\u09bf\u09ae \u09b8\u09be\u09b9\u09be\u09b0\u09be", "PK": "\u09aa\u09be\u0995\u09bf\u09b8\u09cd\u09a4\u09be\u09a8", "PA": "\u09aa\u09be\u09a8\u09be\u09ae\u09be", "PG": "\u09aa\u09be\u09aa\u09c1\u09af\u09bc\u09be \u09a8\u09bf\u0989 \u0997\u09bf\u09a8\u09bf", "PW": "\u09aa\u09be\u09b2\u09be\u0989", "PN": "\u09aa\u09bf\u099f\u0995\u09c7\u09af\u09bc\u09be\u09b0\u09cd\u09a8 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "PR": "\u09aa\u09c1\u09af\u09bc\u09c7\u09b0\u09cd\u09a4\u09cb \u09b0\u09bf\u0995\u09cb", "PE": "\u09aa\u09c7\u09b0\u09c1", "PL": "\u09aa\u09cb\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "PY": "\u09aa\u09cd\u09af\u09be\u09b0\u09be\u0997\u09c1\u09af\u09bc\u09c7", "FK": "\u09ab\u0995\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "GF": "\u09ab\u09b0\u09be\u09b8\u09c0 \u0997\u09be\u09af\u09bc\u09be\u09a8\u09be", "TF": "\u09ab\u09b0\u09be\u09b8\u09c0 \u09a6\u0995\u09cd\u09b7\u09bf\u09a3\u09be\u099e\u09cd\u099a\u09b2", "PF": "\u09ab\u09b0\u09be\u09b8\u09c0 \u09aa\u09b2\u09bf\u09a8\u09c7\u09b6\u09bf\u09af\u09bc\u09be", "FJ": "\u09ab\u09bf\u099c\u09bf", "FI": "\u09ab\u09bf\u09a8\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "PH": "\u09ab\u09bf\u09b2\u09bf\u09aa\u09be\u0987\u09a8", "FO": "\u09ab\u09cd\u09af\u09be\u09b0\u0993 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "FR": "\u09ab\u09cd\u09b0\u09be\u09a8\u09cd\u09b8", "BW": "\u09ac\u09a4\u09b8\u09cb\u09af\u09bc\u09be\u09a8\u09be", "BO": "\u09ac\u09b2\u09bf\u09ad\u09bf\u09af\u09bc\u09be", "BA": "\u09ac\u09b8\u09a8\u09bf\u09af\u09bc\u09be \u0993 \u09b9\u09be\u09b0\u09cd\u099c\u09c7\u0997\u09cb\u09ad\u09bf\u09a8\u09be", "BD": "\u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6", "BB": "\u09ac\u09be\u09b0\u09ac\u09be\u09a6\u09cb\u09b8", "BM": "\u09ac\u09be\u09b0\u09ae\u09c1\u09a1\u09be", "BH": "\u09ac\u09be\u09b9\u09b0\u09be\u0987\u09a8", "BS": "\u09ac\u09be\u09b9\u09be\u09ae\u09be \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "BF": "\u09ac\u09c1\u09b0\u0995\u09bf\u09a8\u09be \u09ab\u09be\u09b8\u09cb", "BI": "\u09ac\u09c1\u09b0\u09c1\u09a8\u09cd\u09a1\u09bf", "BG": "\u09ac\u09c1\u09b2\u0997\u09c7\u09b0\u09bf\u09af\u09bc\u09be", "BJ": "\u09ac\u09c7\u09a8\u09bf\u09a8", "BE": "\u09ac\u09c7\u09b2\u099c\u09bf\u09af\u09bc\u09be\u09ae", "BY": "\u09ac\u09c7\u09b2\u09be\u09b0\u09c1\u09b6", "BZ": "\u09ac\u09c7\u09b2\u09bf\u099c", "BV": "\u09ac\u09cb\u09ad\u09c7\u099f \u09a6\u09cd\u09ac\u09c0\u09aa", "BR": "\u09ac\u09cd\u09b0\u09be\u099c\u09bf\u09b2", "IO": "\u09ac\u09cd\u09b0\u09bf\u099f\u09bf\u09b6 \u09ad\u09be\u09b0\u09a4 \u09ae\u09b9\u09be\u09b8\u09be\u0997\u09b0\u09c0\u09af\u09bc \u0985\u099e\u09cd\u099a\u09b2", "VG": "\u09ac\u09cd\u09b0\u09bf\u099f\u09bf\u09b6 \u09ad\u09be\u09b0\u09cd\u099c\u09bf\u09a8 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "BN": "\u09ac\u09cd\u09b0\u09c1\u09a8\u09c7\u0987", "VU": "\u09ad\u09be\u09a8\u09c1\u09af\u09bc\u09be\u099f\u09c1", "IN": "\u09ad\u09be\u09b0\u09a4", "VN": "\u09ad\u09bf\u09af\u09bc\u09c7\u09a4\u09a8\u09be\u09ae", "BT": "\u09ad\u09c1\u099f\u09be\u09a8", "VE": "\u09ad\u09c7\u09a8\u09c7\u099c\u09c1\u09af\u09bc\u09c7\u09b2\u09be", "VA": "\u09ad\u09cd\u09af\u09be\u099f\u09bf\u0995\u09be\u09a8 \u09b8\u09bf\u099f\u09bf", "MN": "\u09ae\u0999\u09cd\u0997\u09cb\u09b2\u09bf\u09af\u09bc\u09be", "CF": "\u09ae\u09a7\u09cd\u09af \u0986\u09ab\u09cd\u09b0\u09bf\u0995\u09be\u09b0 \u09aa\u09cd\u09b0\u099c\u09be\u09a4\u09a8\u09cd\u09a4\u09cd\u09b0", "MS": "\u09ae\u09a8\u09cd\u099f\u09b8\u09c7\u09b0\u09be\u099f", "ME": "\u09ae\u09a8\u09cd\u099f\u09bf\u09a8\u09bf\u0997\u09cd\u09b0\u09cb", "MR": "\u09ae\u09b0\u09bf\u09a4\u09be\u09a8\u09bf\u09af\u09bc\u09be", "MU": "\u09ae\u09b0\u09bf\u09b6\u09be\u09b8", "MD": "\u09ae\u09b2\u09a1\u09cb\u09ad\u09be", "MG": "\u09ae\u09be\u09a6\u09be\u0997\u09be\u09b8\u09cd\u0995\u09be\u09b0", "MM": "\u09ae\u09be\u09af\u09bc\u09be\u09a8\u09ae\u09be\u09b0 (\u09ac\u09be\u09b0\u09cd\u09ae\u09be)", "YT": "\u09ae\u09be\u09af\u09bc\u09cb\u09a4\u09cd\u09a4\u09c7", "US": "\u09ae\u09be\u09b0\u09cd\u0995\u09bf\u09a8 \u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0", "VI": "\u09ae\u09be\u09b0\u09cd\u0995\u09bf\u09a8 \u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u09ad\u09be\u09b0\u09cd\u099c\u09bf\u09a8 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "MQ": "\u09ae\u09be\u09b0\u09cd\u099f\u09bf\u09a8\u09bf\u0995", "MV": "\u09ae\u09be\u09b2\u09a6\u09cd\u09ac\u09c0\u09aa", "MY": "\u09ae\u09be\u09b2\u09af\u09bc\u09c7\u09b6\u09bf\u09af\u09bc\u09be", "MW": "\u09ae\u09be\u09b2\u09be\u0989\u0987", "ML": "\u09ae\u09be\u09b2\u09bf", "MT": "\u09ae\u09be\u09b2\u09cd\u099f\u09be", "EG": "\u09ae\u09bf\u09b6\u09b0", "MX": "\u09ae\u09c7\u0995\u09cd\u09b8\u09bf\u0995\u09cb", "MZ": "\u09ae\u09cb\u099c\u09be\u09ae\u09cd\u09ac\u09bf\u0995", "MC": "\u09ae\u09cb\u09a8\u09be\u0995\u09cb", "MA": "\u09ae\u09cb\u09b0\u0995\u09cd\u0995\u09cb", "MO": "\u09ae\u09cd\u09af\u09be\u0995\u09be\u0993 \u098f\u09b8\u098f\u0986\u09b0 \u099a\u09c0\u09a8\u09be", "GB": "\u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u099c\u09cd\u09af", "RU": "\u09b0\u09be\u09b6\u09bf\u09af\u09bc\u09be", "RE": "\u09b0\u09bf\u0987\u0989\u09a8\u09bf\u09af\u09bc\u09a8", "RW": "\u09b0\u09c1\u09af\u09bc\u09be\u09a8\u09cd\u09a1\u09be", "RO": "\u09b0\u09cb\u09ae\u09be\u09a8\u09bf\u09af\u09bc\u09be", "LR": "\u09b2\u09be\u0987\u09ac\u09c7\u09b0\u09bf\u09af\u09bc\u09be", "LA": "\u09b2\u09be\u0993\u09b8", "LU": "\u09b2\u09be\u0995\u09cd\u09b8\u09c7\u09ae\u09ac\u09be\u09b0\u09cd\u0997", "LV": "\u09b2\u09be\u09a4\u09cd\u09ad\u09bf\u09af\u09bc\u09be", "LI": "\u09b2\u09bf\u099a\u09c7\u09a8\u09b8\u09cd\u099f\u09c7\u0987\u09a8", "LT": "\u09b2\u09bf\u09a5\u09c1\u09af\u09bc\u09be\u09a8\u09bf\u09af\u09bc\u09be", "LY": "\u09b2\u09bf\u09ac\u09bf\u09af\u09bc\u09be", "LB": "\u09b2\u09c7\u09ac\u09be\u09a8\u09a8", "LS": "\u09b2\u09c7\u09b8\u09cb\u09a5\u09cb", "LK": "\u09b6\u09cd\u09b0\u09c0\u09b2\u0999\u09cd\u0995\u09be", "AE": "\u09b8\u0982\u09af\u09c1\u0995\u09cd\u09a4 \u0986\u09b0\u09ac \u0986\u09ae\u09bf\u09b0\u09be\u09a4", "SB": "\u09b8\u09b2\u09cb\u09ae\u09a8 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c", "CY": "\u09b8\u09be\u0987\u09aa\u09cd\u09b0\u09be\u09b8", "ST": "\u09b8\u09be\u0993\u099f\u09cb\u09ae\u09be \u0993 \u09aa\u09cd\u09b0\u09bf\u09a8\u09cd\u09b8\u09bf\u09aa\u09bf", "SM": "\u09b8\u09be\u09a8 \u09ae\u09be\u09b0\u09bf\u09a8\u09cb", "WS": "\u09b8\u09be\u09ae\u09cb\u09af\u09bc\u09be", "RS": "\u09b8\u09be\u09b0\u09cd\u09ac\u09bf\u09af\u09bc\u09be", "SG": "\u09b8\u09bf\u0999\u09cd\u0997\u09be\u09aa\u09c1\u09b0", "SX": "\u09b8\u09bf\u09a8\u09cd\u099f \u09ae\u09be\u09b0\u09cd\u099f\u09c7\u09a8", "SL": "\u09b8\u09bf\u09af\u09bc\u09c7\u09b0\u09be \u09b2\u09bf\u0993\u09a8", "SY": "\u09b8\u09bf\u09b0\u09bf\u09af\u09bc\u09be", "SC": "\u09b8\u09bf\u09b8\u09bf\u09b2\u09bf", "CH": "\u09b8\u09c1\u0987\u099c\u09be\u09b0\u09b2\u09cd\u09af\u09be\u09a8\u09cd\u09a1", "SE": "\u09b8\u09c1\u0987\u09a1\u09c7\u09a8", "SD": "\u09b8\u09c1\u09a6\u09be\u09a8", "SR": "\u09b8\u09c1\u09b0\u09bf\u09a8\u09be\u09ae", "SN": "\u09b8\u09c7\u09a8\u09c7\u0997\u09be\u09b2", "KN": "\u09b8\u09c7\u09a8\u09cd\u099f \u0995\u09bf\u099f\u09b8 \u0993 \u09a8\u09c7\u09ad\u09bf\u09b8", "PM": "\u09b8\u09c7\u09a8\u09cd\u099f \u09aa\u09bf\u09af\u09bc\u09c7\u09b0 \u0993 \u09ae\u09bf\u0995\u09c1\u09af\u09bc\u09c7\u09b2\u09a8", "BL": "\u09b8\u09c7\u09a8\u09cd\u099f \u09ac\u09be\u09b0\u09a5\u09c7\u09b2\u09bf\u09ae\u09bf", "VC": "\u09b8\u09c7\u09a8\u09cd\u099f \u09ad\u09bf\u09a8\u09b8\u09c7\u09a8\u09cd\u099f \u0993 \u0997\u09cd\u09b0\u09c7\u09a8\u09be\u09a1\u09bf\u09a8\u09b8", "MF": "\u09b8\u09c7\u09a8\u09cd\u099f \u09ae\u09be\u09b0\u09cd\u099f\u09bf\u09a8", "LC": "\u09b8\u09c7\u09a8\u09cd\u099f \u09b2\u09c1\u09b8\u09bf\u09af\u09bc\u09be", "SH": "\u09b8\u09c7\u09a8\u09cd\u099f \u09b9\u09c7\u09b2\u09c7\u09a8\u09be", "SO": "\u09b8\u09cb\u09ae\u09be\u09b2\u09bf\u09af\u09bc\u09be", "SA": "\u09b8\u09cc\u09a6\u09bf \u0986\u09b0\u09ac", "ES": "\u09b8\u09cd\u09aa\u09c7\u09a8", "SJ": "\u09b8\u09cd\u09ac\u09be\u09b2\u09ac\u09be\u09b0\u09cd\u09a1 \u0993 \u099c\u09be\u09a8 \u09ae\u09c7\u09af\u09bc\u09c7\u09a8", "SK": "\u09b8\u09cd\u09b2\u09cb\u09ad\u09be\u0995\u09bf\u09af\u09bc\u09be", "SI": "\u09b8\u09cd\u09b2\u09cb\u09ad\u09be\u09a8\u09bf\u09af\u09bc\u09be", "HK": "\u09b9\u0982\u0995\u0982 \u098f\u09b8\u098f\u0986\u09b0 \u099a\u09c0\u09a8\u09be", "HN": "\u09b9\u09a8\u09cd\u09a1\u09c1\u09b0\u09be\u09b8", "HT": "\u09b9\u09be\u0987\u09a4\u09bf", "HU": "\u09b9\u09be\u0999\u09cd\u0997\u09c7\u09b0\u09bf", "HM": "\u09b9\u09be\u09b0\u09cd\u09a1 \u098f\u09ac\u0982 \u09ae\u09cd\u09af\u09be\u0995\u09a1\u09cb\u09a8\u09be\u09b2\u09cd\u09a1 \u09a6\u09cd\u09ac\u09c0\u09aa\u09aa\u09c1\u099e\u09cd\u099c"}onionshare-2.6.3/desktop/onionshare/resources/countries/ca.json000066400000000000000000000122131475545702100250210ustar00rootroot00000000000000{"AF": "Afganistan", "AL": "Alb\u00e0nia", "DE": "Alemanya", "DZ": "Alg\u00e8ria", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Ant\u00e0rtida", "AG": "Antigua i Barbuda", "SA": "Ar\u00e0bia Saudita", "AR": "Argentina", "AM": "Arm\u00e8nia", "AW": "Aruba", "AU": "Austr\u00e0lia", "AT": "\u00c0ustria", "AZ": "Azerbaidjan", "BS": "Bahames", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BY": "Belar\u00fas", "BE": "B\u00e8lgica", "BZ": "Belize", "BJ": "Ben\u00edn", "BM": "Bermudes", "BT": "Bhutan", "BO": "Bol\u00edvia", "BA": "B\u00f2snia i Hercegovina", "BW": "Botswana", "BV": "Bouvet", "BR": "Brasil", "BN": "Brunei", "BG": "Bulg\u00e0ria", "BF": "Burkina Faso", "BI": "Burundi", "KH": "Cambodja", "CM": "Camerun", "CA": "Canad\u00e0", "CV": "Cap Verd", "BQ": "Carib Neerland\u00e8s", "VA": "Ciutat del Vatic\u00e0", "CO": "Col\u00f2mbia", "KM": "Comores", "CG": "Congo - Brazzaville", "CD": "Congo - Kinshasa", "KP": "Corea del Nord", "KR": "Corea del Sud", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire", "HR": "Cro\u00e0cia", "CU": "Cuba", "CW": "Cura\u00e7ao", "DK": "Dinamarca", "DJ": "Djibouti", "DM": "Dominica", "EG": "Egipte", "SV": "El Salvador", "AE": "Emirats \u00c0rabs Units", "EC": "Equador", "ER": "Eritrea", "SK": "Eslov\u00e0quia", "SI": "Eslov\u00e8nia", "ES": "Espanya", "US": "Estats Units", "EE": "Est\u00f2nia", "SZ": "eSwatini", "ET": "Eti\u00f2pia", "FJ": "Fiji", "PH": "Filipines", "FI": "Finl\u00e0ndia", "FR": "Fran\u00e7a", "GA": "Gabon", "GM": "G\u00e0mbia", "GE": "Ge\u00f2rgia", "GH": "Ghana", "GI": "Gibraltar", "GR": "Gr\u00e8cia", "GD": "Grenada", "GL": "Groenl\u00e0ndia", "GP": "Guadeloupe", "GF": "Guaiana Francesa", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea Bissau", "GQ": "Guinea Equatorial", "GY": "Guyana", "HT": "Hait\u00ed", "HN": "Hondures", "HK": "Hong Kong (RAE Xina)", "HU": "Hongria", "YE": "Iemen", "CX": "Illa Christmas", "RE": "Illa de la Reuni\u00f3", "IM": "Illa de Man", "HM": "Illa Heard i Illes McDonald", "AX": "Illes \u00c5land", "KY": "Illes Caiman", "CC": "Illes Cocos", "CK": "Illes Cook", "FO": "Illes F\u00e8roe", "GS": "Illes Ge\u00f2rgia del Sud i Sandwich del Sud", "FK": "Illes Malvines", "PN": "Illes Pitcairn", "SB": "Illes Salom\u00f3", "TC": "Illes Turks i Caicos", "VG": "Illes Verges Brit\u00e0niques", "VI": "Illes Verges Nord-americanes", "IN": "\u00cdndia", "ID": "Indon\u00e8sia", "IR": "Iran", "IQ": "Iraq", "IE": "Irlanda", "IS": "Isl\u00e0ndia", "IL": "Israel", "IT": "It\u00e0lia", "JM": "Jamaica", "JP": "Jap\u00f3", "JO": "Jord\u00e0nia", "KZ": "Kazakhstan", "KE": "Kenya", "KG": "Kirguizistan", "KI": "Kiribati", "KW": "Kuwait", "LA": "Laos", "LS": "Lesotho", "LV": "Let\u00f2nia", "LB": "L\u00edban", "LR": "Lib\u00e8ria", "LY": "L\u00edbia", "LI": "Liechtenstein", "LT": "Litu\u00e0nia", "LU": "Luxemburg", "MO": "Macau (RAE Xina)", "MK": "Maced\u00f2nia del Nord", "MG": "Madagascar", "MY": "Mal\u00e0isia", "MW": "Malawi", "MV": "Maldives", "ML": "Mali", "MT": "Malta", "MA": "Marroc", "MQ": "Martinica", "MU": "Maurici", "MR": "Maurit\u00e0nia", "YT": "Mayotte", "MX": "M\u00e8xic", "MZ": "Mo\u00e7ambic", "MD": "Mold\u00e0via", "MC": "M\u00f2naco", "MN": "Mong\u00f2lia", "ME": "Montenegro", "MS": "Montserrat", "MM": "Myanmar (Birm\u00e0nia)", "NA": "Nam\u00edbia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicaragua", "NE": "N\u00edger", "NG": "Nig\u00e8ria", "NU": "Niue", "NF": "Norfolk", "NO": "Noruega", "NC": "Nova Caled\u00f2nia", "NZ": "Nova Zelanda", "OM": "Oman", "NL": "Pa\u00efsos Baixos", "PK": "Pakistan", "PW": "Palau", "PA": "Panam\u00e0", "PG": "Papua Nova Guinea", "PY": "Paraguai", "PE": "Per\u00fa", "PF": "Polin\u00e8sia Francesa", "PL": "Pol\u00f2nia", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "GB": "Regne Unit", "CF": "Rep\u00fablica Centreafricana", "ZA": "Rep\u00fablica de Sud-\u00e0frica", "DO": "Rep\u00fablica Dominicana", "RO": "Romania", "RW": "Ruanda", "RU": "R\u00fassia", "EH": "S\u00e0hara Occidental", "BL": "Saint Barth\u00e9lemy", "KN": "Saint Christopher i Nevis", "SH": "Saint Helena", "LC": "Saint Lucia", "MF": "Saint Martin", "VC": "Saint Vincent i les Grenadines", "PM": "Saint-Pierre-et-Miquelon", "WS": "Samoa", "AS": "Samoa Nord-americana", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 i Pr\u00edncipe", "SN": "Senegal", "RS": "S\u00e8rbia", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapur", "SX": "Sint Maarten", "SY": "S\u00edria", "SO": "Som\u00e0lia", "LK": "Sri Lanka", "SD": "Sudan", "SS": "Sudan del Sud", "SE": "Su\u00e8cia", "CH": "Su\u00efssa", "SR": "Surinam", "SJ": "Svalbard i Jan Mayen", "TJ": "Tadjikistan", "TH": "Tail\u00e0ndia", "TW": "Taiwan", "TZ": "Tanz\u00e0nia", "IO": "Territori Brit\u00e0nic de l\u2019Oce\u00e0 \u00cdndic", "TF": "Territoris Australs Francesos", "TL": "Timor Oriental", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinitat i Tobago", "TN": "Tun\u00edsia", "TM": "Turkmenistan", "TR": "Turquia", "TD": "Txad", "CZ": "Tx\u00e8quia", "UA": "Ucra\u00efna", "UG": "Uganda", "UY": "Uruguai", "UZ": "Uzbekistan", "VU": "Vanuatu", "VE": "Vene\u00e7uela", "VN": "Vietnam", "WF": "Wallis i Futuna", "CL": "Xile", "CN": "Xina", "CY": "Xipre", "ZM": "Z\u00e0mbia", "ZW": "Zimb\u00e0bue"}onionshare-2.6.3/desktop/onionshare/resources/countries/cs.json000066400000000000000000000130051475545702100250430ustar00rootroot00000000000000{"AF": "Afgh\u00e1nist\u00e1n", "AX": "\u00c5landy", "AL": "Alb\u00e1nie", "DZ": "Al\u017e\u00edrsko", "AS": "Americk\u00e1 Samoa", "VI": "Americk\u00e9 Panensk\u00e9 ostrovy", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktida", "AG": "Antigua a Barbuda", "AR": "Argentina", "AM": "Arm\u00e9nie", "AW": "Aruba", "AU": "Austr\u00e1lie", "AZ": "\u00c1zerb\u00e1jd\u017e\u00e1n", "BS": "Bahamy", "BH": "Bahrajn", "BD": "Banglad\u00e9\u0161", "BB": "Barbados", "BE": "Belgie", "BZ": "Belize", "BY": "B\u011blorusko", "BJ": "Benin", "BM": "Bermudy", "BT": "Bh\u00fat\u00e1n", "BO": "Bol\u00edvie", "BA": "Bosna a Hercegovina", "BW": "Botswana", "BV": "Bouvet\u016fv ostrov", "BR": "Braz\u00edlie", "IO": "Britsk\u00e9 indickooce\u00e1nsk\u00e9 \u00fazem\u00ed", "VG": "Britsk\u00e9 Panensk\u00e9 ostrovy", "BN": "Brunej", "BG": "Bulharsko", "BF": "Burkina Faso", "BI": "Burundi", "CK": "Cookovy ostrovy", "CW": "Cura\u00e7ao", "TD": "\u010cad", "ME": "\u010cern\u00e1 Hora", "CZ": "\u010cesko", "CN": "\u010c\u00edna", "DK": "D\u00e1nsko", "DM": "Dominika", "DO": "Dominik\u00e1nsk\u00e1 republika", "DJ": "D\u017eibutsko", "EG": "Egypt", "EC": "Ekv\u00e1dor", "ER": "Eritrea", "EE": "Estonsko", "ET": "Etiopie", "FO": "Faersk\u00e9 ostrovy", "FK": "Falklandsk\u00e9 ostrovy", "FJ": "Fid\u017ei", "PH": "Filip\u00edny", "FI": "Finsko", "FR": "Francie", "GF": "Francouzsk\u00e1 Guyana", "TF": "Francouzsk\u00e1 ji\u017en\u00ed \u00fazem\u00ed", "PF": "Francouzsk\u00e1 Polyn\u00e9sie", "GA": "Gabon", "GM": "Gambie", "GH": "Ghana", "GI": "Gibraltar", "GD": "Grenada", "GL": "Gr\u00f3nsko", "GE": "Gruzie", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard\u016fv ostrov a McDonaldovy ostrovy", "HN": "Honduras", "HK": "Hongkong \u2013 ZAO \u010c\u00edny", "CL": "Chile", "HR": "Chorvatsko", "IN": "Indie", "ID": "Indon\u00e9sie", "IQ": "Ir\u00e1k", "IR": "\u00cdr\u00e1n", "IE": "Irsko", "IS": "Island", "IT": "It\u00e1lie", "IL": "Izrael", "JM": "Jamajka", "JP": "Japonsko", "YE": "Jemen", "ZA": "Jihoafrick\u00e1 republika", "GS": "Ji\u017en\u00ed Georgie a Ji\u017en\u00ed Sandwichovy ostrovy", "KR": "Ji\u017en\u00ed Korea", "SS": "Ji\u017en\u00ed S\u00fad\u00e1n", "JO": "Jord\u00e1nsko", "KY": "Kajmansk\u00e9 ostrovy", "KH": "Kambod\u017ea", "CM": "Kamerun", "CA": "Kanada", "CV": "Kapverdy", "BQ": "Karibsk\u00e9 Nizozemsko", "QA": "Katar", "KZ": "Kazachst\u00e1n", "KE": "Ke\u0148a", "KI": "Kiribati", "CC": "Kokosov\u00e9 ostrovy", "CO": "Kolumbie", "KM": "Komory", "CG": "Kongo \u2013 Brazzaville", "CD": "Kongo \u2013 Kinshasa", "CR": "Kostarika", "CU": "Kuba", "KW": "Kuvajt", "CY": "Kypr", "KG": "Kyrgyzst\u00e1n", "LA": "Laos", "LS": "Lesotho", "LB": "Libanon", "LR": "Lib\u00e9rie", "LY": "Libye", "LI": "Lichten\u0161tejnsko", "LT": "Litva", "LV": "Loty\u0161sko", "LU": "Lucembursko", "MO": "Macao \u2013 ZAO \u010c\u00edny", "MG": "Madagaskar", "HU": "Ma\u010farsko", "MY": "Malajsie", "MW": "Malawi", "MV": "Maledivy", "ML": "Mali", "MT": "Malta", "MA": "Maroko", "MQ": "Martinik", "MU": "Mauricius", "MR": "Maurit\u00e1nie", "YT": "Mayotte", "MX": "Mexiko", "MD": "Moldavsko", "MC": "Monako", "MN": "Mongolsko", "MS": "Montserrat", "MZ": "Mosambik", "MM": "Myanmar (Barma)", "NA": "Namibie", "NR": "Nauru", "DE": "N\u011bmecko", "NP": "Nep\u00e1l", "NE": "Niger", "NG": "Nig\u00e9rie", "NI": "Nikaragua", "NU": "Niue", "NL": "Nizozemsko", "NF": "Norfolk", "NO": "Norsko", "NC": "Nov\u00e1 Kaledonie", "NZ": "Nov\u00fd Z\u00e9land", "OM": "Om\u00e1n", "IM": "Ostrov Man", "PK": "P\u00e1kist\u00e1n", "PW": "Palau", "PA": "Panama", "PG": "Papua-Nov\u00e1 Guinea", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairnovy ostrovy", "CI": "Pob\u0159e\u017e\u00ed slonoviny", "PL": "Polsko", "PR": "Portoriko", "PT": "Portugalsko", "AT": "Rakousko", "RE": "R\u00e9union", "GQ": "Rovn\u00edkov\u00e1 Guinea", "RO": "Rumunsko", "RU": "Rusko", "RW": "Rwanda", "GR": "\u0158ecko", "PM": "Saint-Pierre a Miquelon", "SV": "Salvador", "WS": "Samoa", "SM": "San Marino", "SA": "Sa\u00fadsk\u00e1 Ar\u00e1bie", "SN": "Senegal", "KP": "Severn\u00ed Korea", "MK": "Severn\u00ed Makedonie", "SC": "Seychely", "SL": "Sierra Leone", "SG": "Singapur", "SK": "Slovensko", "SI": "Slovinsko", "SO": "Som\u00e1lsko", "AE": "Spojen\u00e9 arabsk\u00e9 emir\u00e1ty", "GB": "Spojen\u00e9 kr\u00e1lovstv\u00ed", "US": "Spojen\u00e9 st\u00e1ty", "RS": "Srbsko", "LK": "Sr\u00ed Lanka", "CF": "St\u0159edoafrick\u00e1 republika", "SD": "S\u00fad\u00e1n", "SR": "Surinam", "SH": "Svat\u00e1 Helena", "LC": "Svat\u00e1 Lucie", "BL": "Svat\u00fd Bartolom\u011bj", "KN": "Svat\u00fd Kry\u0161tof a Nevis", "MF": "Svat\u00fd Martin (Francie)", "SX": "Svat\u00fd Martin (Nizozemsko)", "ST": "Svat\u00fd Tom\u00e1\u0161 a Princ\u016fv ostrov", "VC": "Svat\u00fd Vincenc a Grenadiny", "SZ": "Svazijsko", "SY": "S\u00fdrie", "SB": "\u0160alamounovy ostrovy", "ES": "\u0160pan\u011blsko", "SJ": "\u0160picberky a Jan Mayen", "SE": "\u0160v\u00e9dsko", "CH": "\u0160v\u00fdcarsko", "TJ": "T\u00e1d\u017eikist\u00e1n", "TZ": "Tanzanie", "TH": "Thajsko", "TW": "Tchaj-wan", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad a Tobago", "TN": "Tunisko", "TR": "Turecko", "TM": "Turkmenist\u00e1n", "TC": "Turks a Caicos", "UG": "Uganda", "UA": "Ukrajina", "UY": "Uruguay", "UZ": "Uzbekist\u00e1n", "CX": "V\u00e1no\u010dn\u00ed ostrov", "VU": "Vanuatu", "VA": "Vatik\u00e1n", "VE": "Venezuela", "VN": "Vietnam", "TL": "V\u00fdchodn\u00ed Timor", "WF": "Wallis a Futuna", "ZM": "Zambie", "EH": "Z\u00e1padn\u00ed Sahara", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/da.json000066400000000000000000000114571475545702100250330ustar00rootroot00000000000000{"AF": "Afghanistan", "AL": "Albanien", "DZ": "Algeriet", "AS": "Amerikansk Samoa", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktis", "AG": "Antigua og Barbuda", "AR": "Argentina", "AM": "Armenien", "AW": "Aruba", "AZ": "Aserbajdsjan", "AU": "Australien", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BE": "Belgien", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnien-Hercegovina", "BW": "Botswana", "BV": "Bouvet\u00f8en", "BR": "Brasilien", "BN": "Brunei", "BG": "Bulgarien", "BF": "Burkina Faso", "BI": "Burundi", "KH": "Cambodja", "CM": "Cameroun", "CA": "Canada", "KY": "Cayman\u00f8erne", "CL": "Chile", "CC": "Cocos\u00f8erne", "CO": "Colombia", "KM": "Comorerne", "CG": "Congo-Brazzaville", "CD": "Congo-Kinshasa", "CK": "Cook\u00f8erne", "CR": "Costa Rica", "CU": "Cuba", "CW": "Cura\u00e7ao", "CY": "Cypern", "DK": "Danmark", "VI": "De Amerikanske Jomfru\u00f8er", "VG": "De Britiske Jomfru\u00f8er", "AE": "De Forenede Arabiske Emirater", "TF": "De Franske Besiddelser i Det Sydlige Indiske Ocean og Antarktis", "BQ": "De tidligere Nederlandske Antiller", "CF": "Den Centralafrikanske Republik", "DO": "Den Dominikanske Republik", "IO": "Det Britiske Territorium i Det Indiske Ocean", "DJ": "Djibouti", "DM": "Dominica", "EC": "Ecuador", "EG": "Egypten", "SV": "El Salvador", "CI": "Elfenbenskysten", "ER": "Eritrea", "EE": "Estland", "SZ": "Eswatini", "ET": "Etiopien", "FK": "Falklands\u00f8erne", "FJ": "Fiji", "PH": "Filippinerne", "FI": "Finland", "FR": "Frankrig", "GF": "Fransk Guyana", "PF": "Fransk Polynesien", "FO": "F\u00e6r\u00f8erne", "GA": "Gabon", "GM": "Gambia", "GE": "Georgien", "GH": "Ghana", "GI": "Gibraltar", "GD": "Grenada", "GR": "Gr\u00e6kenland", "GL": "Gr\u00f8nland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard Island og McDonald Islands", "NL": "Holland", "HN": "Honduras", "BY": "Hviderusland", "IN": "Indien", "ID": "Indonesien", "IQ": "Irak", "IR": "Iran", "IE": "Irland", "IS": "Island", "IM": "Isle of Man", "IL": "Israel", "IT": "Italien", "JM": "Jamaica", "JP": "Japan", "JO": "Jordan", "CX": "Jule\u00f8en", "CV": "Kap Verde", "KZ": "Kasakhstan", "KE": "Kenya", "CN": "Kina", "KG": "Kirgisistan", "KI": "Kiribati", "HR": "Kroatien", "KW": "Kuwait", "LA": "Laos", "LS": "Lesotho", "LV": "Letland", "LB": "Libanon", "LR": "Liberia", "LY": "Libyen", "LI": "Liechtenstein", "LT": "Litauen", "LU": "Luxembourg", "MG": "Madagaskar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldiverne", "ML": "Mali", "MT": "Malta", "MA": "Marokko", "MQ": "Martinique", "MR": "Mauretanien", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexico", "MD": "Moldova", "MC": "Monaco", "MN": "Mongoliet", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mozambique", "MM": "Myanmar (Burma)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NZ": "New Zealand", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "KP": "Nordkorea", "MK": "Nordmakedonien", "NF": "Norfolk Island", "NO": "Norge", "NC": "Ny Kaledonien", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua Ny Guinea", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairn", "PL": "Polen", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "RE": "R\u00e9union", "RO": "Rum\u00e6nien", "RU": "Rusland", "RW": "Rwanda", "BL": "Saint Barth\u00e9lemy", "KN": "Saint Kitts og Nevis", "LC": "Saint Lucia", "MF": "Saint Martin", "PM": "Saint Pierre og Miquelon", "VC": "Saint Vincent og Grenadinerne", "SB": "Salomon\u00f8erne", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 og Pr\u00edncipe", "HK": "SAR Hongkong", "MO": "SAR Macao", "SA": "Saudi-Arabien", "CH": "Schweiz", "SN": "Senegal", "RS": "Serbien", "SC": "Seychellerne", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakiet", "SI": "Slovenien", "SO": "Somalia", "GS": "South Georgia og De Sydlige Sandwich\u00f8er", "ES": "Spanien", "LK": "Sri Lanka", "SH": "St. Helena", "GB": "Storbritannien", "SD": "Sudan", "SR": "Surinam", "SJ": "Svalbard og Jan Mayen", "SE": "Sverige", "ZA": "Sydafrika", "KR": "Sydkorea", "SS": "Sydsudan", "SY": "Syrien", "TJ": "Tadsjikistan", "TW": "Taiwan", "TZ": "Tanzania", "TD": "Tchad", "TH": "Thailand", "TL": "Timor-Leste", "CZ": "Tjekkiet", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad og Tobago", "TN": "Tunesien", "TM": "Turkmenistan", "TC": "Turks- og Caicos\u00f8erne", "TR": "Tyrkiet", "DE": "Tyskland", "UG": "Uganda", "UA": "Ukraine", "HU": "Ungarn", "UY": "Uruguay", "US": "USA", "UZ": "Usbekistan", "VU": "Vanuatu", "VA": "Vatikanstaten", "VE": "Venezuela", "EH": "Vestsahara", "VN": "Vietnam", "WF": "Wallis og Futuna", "YE": "Yemen", "ZM": "Zambia", "ZW": "Zimbabwe", "GQ": "\u00c6kvatorialguinea", "AT": "\u00d8strig", "AX": "\u00c5land"}onionshare-2.6.3/desktop/onionshare/resources/countries/de.json000066400000000000000000000116531475545702100250350ustar00rootroot00000000000000{"AF": "Afghanistan", "EG": "\u00c4gypten", "AX": "\u00c5landinseln", "AL": "Albanien", "DZ": "Algerien", "AS": "Amerikanisch-Samoa", "VI": "Amerikanische Jungferninseln", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktis", "AG": "Antigua und Barbuda", "GQ": "\u00c4quatorialguinea", "AR": "Argentinien", "AM": "Armenien", "AW": "Aruba", "AZ": "Aserbaidschan", "ET": "\u00c4thiopien", "AU": "Australien", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesch", "BB": "Barbados", "BY": "Belarus", "BE": "Belgien", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivien", "BQ": "Bonaire, Sint Eustatius und Saba", "BA": "Bosnien und Herzegowina", "BW": "Botsuana", "BV": "Bouvetinsel", "BR": "Brasilien", "VG": "Britische Jungferninseln", "IO": "Britisches Territorium im Indischen Ozean", "BN": "Brunei Darussalam", "BG": "Bulgarien", "BF": "Burkina Faso", "BI": "Burundi", "CV": "Cabo Verde", "CL": "Chile", "CN": "China", "CK": "Cookinseln", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire", "CW": "Cura\u00e7ao", "DK": "D\u00e4nemark", "DE": "Deutschland", "DM": "Dominica", "DO": "Dominikanische Republik", "DJ": "Dschibuti", "EC": "Ecuador", "SV": "El Salvador", "ER": "Eritrea", "EE": "Estland", "SZ": "Eswatini", "FK": "Falklandinseln", "FO": "F\u00e4r\u00f6er", "FJ": "Fidschi", "FI": "Finnland", "FR": "Frankreich", "GF": "Franz\u00f6sisch-Guayana", "PF": "Franz\u00f6sisch-Polynesien", "TF": "Franz\u00f6sische S\u00fcd- und Antarktisgebiete", "GA": "Gabun", "GM": "Gambia", "GE": "Georgien", "GH": "Ghana", "GI": "Gibraltar", "GD": "Grenada", "GR": "Griechenland", "GL": "Gr\u00f6nland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard und McDonaldinseln", "HN": "Honduras", "IN": "Indien", "ID": "Indonesien", "IQ": "Irak", "IR": "Iran", "IE": "Irland", "IS": "Island", "IM": "Isle of Man", "IL": "Israel", "IT": "Italien", "JM": "Jamaika", "JP": "Japan", "YE": "Jemen", "JO": "Jordanien", "KY": "Kaimaninseln", "KH": "Kambodscha", "CM": "Kamerun", "CA": "Kanada", "KZ": "Kasachstan", "QA": "Katar", "KE": "Kenia", "KG": "Kirgisistan", "KI": "Kiribati", "CC": "Kokosinseln", "CO": "Kolumbien", "KM": "Komoren", "CG": "Kongo-Brazzaville", "CD": "Kongo-Kinshasa", "HR": "Kroatien", "CU": "Kuba", "KW": "Kuwait", "LA": "Laos", "LS": "Lesotho", "LV": "Lettland", "LB": "Libanon", "LR": "Liberia", "LY": "Libyen", "LI": "Liechtenstein", "LT": "Litauen", "LU": "Luxemburg", "MG": "Madagaskar", "MW": "Malawi", "MY": "Malaysia", "MV": "Malediven", "ML": "Mali", "MT": "Malta", "MA": "Marokko", "MQ": "Martinique", "MR": "Mauretanien", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexiko", "MC": "Monaco", "MN": "Mongolei", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mosambik", "MM": "Myanmar", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NC": "Neukaledonien", "NZ": "Neuseeland", "NI": "Nicaragua", "NL": "Niederlande", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "KP": "Nordkorea", "MK": "Nordmazedonien", "NF": "Norfolkinsel", "NO": "Norwegen", "OM": "Oman", "AT": "\u00d6sterreich", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua-Neuguinea", "PY": "Paraguay", "PE": "Peru", "PH": "Philippinen", "PN": "Pitcairninseln", "PL": "Polen", "PT": "Portugal", "PR": "Puerto Rico", "MD": "Republik Moldau", "RE": "R\u00e9union", "RW": "Ruanda", "RO": "Rum\u00e4nien", "RU": "Russland", "SB": "Salomonen", "ZM": "Sambia", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 und Pr\u00edncipe", "SA": "Saudi-Arabien", "SE": "Schweden", "CH": "Schweiz", "SN": "Senegal", "RS": "Serbien", "SC": "Seychellen", "SL": "Sierra Leone", "ZW": "Simbabwe", "SG": "Singapur", "SX": "Sint Maarten", "SK": "Slowakei", "SI": "Slowenien", "SO": "Somalia", "HK": "Sonderverwaltungsregion Hongkong", "MO": "Sonderverwaltungsregion Macau", "ES": "Spanien", "SJ": "Spitzbergen und Jan Mayen", "LK": "Sri Lanka", "BL": "St. Barth\u00e9lemy", "SH": "St. Helena", "KN": "St. Kitts und Nevis", "LC": "St. Lucia", "MF": "St. Martin", "PM": "St. Pierre und Miquelon", "VC": "St. Vincent und die Grenadinen", "ZA": "S\u00fcdafrika", "SD": "Sudan", "GS": "S\u00fcdgeorgien und die S\u00fcdlichen Sandwichinseln", "KR": "S\u00fcdkorea", "SS": "S\u00fcdsudan", "SR": "Suriname", "SY": "Syrien", "TJ": "Tadschikistan", "TW": "Taiwan", "TZ": "Tansania", "TH": "Thailand", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad und Tobago", "TD": "Tschad", "CZ": "Tschechien", "TN": "Tunesien", "TR": "T\u00fcrkei", "TM": "Turkmenistan", "TC": "Turks- und Caicosinseln", "UG": "Uganda", "UA": "Ukraine", "HU": "Ungarn", "UY": "Uruguay", "UZ": "Usbekistan", "VU": "Vanuatu", "VA": "Vatikanstadt", "VE": "Venezuela", "AE": "Vereinigte Arabische Emirate", "US": "Vereinigte Staaten", "GB": "Vereinigtes K\u00f6nigreich", "VN": "Vietnam", "WF": "Wallis und Futuna", "CX": "Weihnachtsinsel", "EH": "Westsahara", "CF": "Zentralafrikanische Republik", "CY": "Zypern"}onionshare-2.6.3/desktop/onionshare/resources/countries/el.json000066400000000000000000000410771475545702100250500ustar00rootroot00000000000000{"SH": "\u0391\u03b3\u03af\u03b1 \u0395\u03bb\u03ad\u03bd\u03b7", "LC": "\u0391\u03b3\u03af\u03b1 \u039b\u03bf\u03c5\u03ba\u03af\u03b1", "BL": "\u0386\u03b3\u03b9\u03bf\u03c2 \u0392\u03b1\u03c1\u03b8\u03bf\u03bb\u03bf\u03bc\u03b1\u03af\u03bf\u03c2", "VC": "\u0386\u03b3\u03b9\u03bf\u03c2 \u0392\u03b9\u03ba\u03ad\u03bd\u03c4\u03b9\u03bf\u03c2 \u03ba\u03b1\u03b9 \u0393\u03c1\u03b5\u03bd\u03b1\u03b4\u03af\u03bd\u03b5\u03c2", "SM": "\u0386\u03b3\u03b9\u03bf\u03c2 \u039c\u03b1\u03c1\u03af\u03bd\u03bf\u03c2", "MF": "\u0386\u03b3\u03b9\u03bf\u03c2 \u039c\u03b1\u03c1\u03c4\u03af\u03bd\u03bf\u03c2 (\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03cc \u03c4\u03bc\u03ae\u03bc\u03b1)", "SX": "\u0386\u03b3\u03b9\u03bf\u03c2 \u039c\u03b1\u03c1\u03c4\u03af\u03bd\u03bf\u03c2 (\u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03b9\u03ba\u03cc \u03c4\u03bc\u03ae\u03bc\u03b1)", "AO": "\u0391\u03b3\u03ba\u03cc\u03bb\u03b1", "AZ": "\u0391\u03b6\u03b5\u03c1\u03bc\u03c0\u03b1\u03ca\u03c4\u03b6\u03ac\u03bd", "EG": "\u0391\u03af\u03b3\u03c5\u03c0\u03c4\u03bf\u03c2", "ET": "\u0391\u03b9\u03b8\u03b9\u03bf\u03c0\u03af\u03b1", "HT": "\u0391\u03ca\u03c4\u03ae", "CI": "\u0391\u03ba\u03c4\u03ae \u0395\u03bb\u03b5\u03c6\u03b1\u03bd\u03c4\u03bf\u03c3\u03c4\u03bf\u03cd", "AL": "\u0391\u03bb\u03b2\u03b1\u03bd\u03af\u03b1", "DZ": "\u0391\u03bb\u03b3\u03b5\u03c1\u03af\u03b1", "VI": "\u0391\u03bc\u03b5\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ad\u03c2 \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03b5\u03c2 \u039d\u03ae\u03c3\u03bf\u03b9", "AS": "\u0391\u03bc\u03b5\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ae \u03a3\u03b1\u03bc\u03cc\u03b1", "AI": "\u0391\u03bd\u03b3\u03ba\u03bf\u03c5\u03af\u03bb\u03b1", "AD": "\u0391\u03bd\u03b4\u03cc\u03c1\u03b1", "AQ": "\u0391\u03bd\u03c4\u03b1\u03c1\u03ba\u03c4\u03b9\u03ba\u03ae", "AG": "\u0391\u03bd\u03c4\u03af\u03b3\u03ba\u03bf\u03c5\u03b1 \u03ba\u03b1\u03b9 \u039c\u03c0\u03b1\u03c1\u03bc\u03c0\u03bf\u03cd\u03bd\u03c4\u03b1", "AR": "\u0391\u03c1\u03b3\u03b5\u03bd\u03c4\u03b9\u03bd\u03ae", "AM": "\u0391\u03c1\u03bc\u03b5\u03bd\u03af\u03b1", "AW": "\u0391\u03c1\u03bf\u03cd\u03bc\u03c0\u03b1", "AU": "\u0391\u03c5\u03c3\u03c4\u03c1\u03b1\u03bb\u03af\u03b1", "AT": "\u0391\u03c5\u03c3\u03c4\u03c1\u03af\u03b1", "AF": "\u0391\u03c6\u03b3\u03b1\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd", "VU": "\u0392\u03b1\u03bd\u03bf\u03c5\u03ac\u03c4\u03bf\u03c5", "VA": "\u0392\u03b1\u03c4\u03b9\u03ba\u03b1\u03bd\u03cc", "BE": "\u0392\u03ad\u03bb\u03b3\u03b9\u03bf", "VE": "\u0392\u03b5\u03bd\u03b5\u03b6\u03bf\u03c5\u03ad\u03bb\u03b1", "BM": "\u0392\u03b5\u03c1\u03bc\u03bf\u03cd\u03b4\u03b5\u03c2", "VN": "\u0392\u03b9\u03b5\u03c4\u03bd\u03ac\u03bc", "BO": "\u0392\u03bf\u03bb\u03b9\u03b2\u03af\u03b1", "KP": "\u0392\u03cc\u03c1\u03b5\u03b9\u03b1 \u039a\u03bf\u03c1\u03ad\u03b1", "MK": "\u0392\u03cc\u03c1\u03b5\u03b9\u03b1 \u039c\u03b1\u03ba\u03b5\u03b4\u03bf\u03bd\u03af\u03b1", "BA": "\u0392\u03bf\u03c3\u03bd\u03af\u03b1 - \u0395\u03c1\u03b6\u03b5\u03b3\u03bf\u03b2\u03af\u03bd\u03b7", "BG": "\u0392\u03bf\u03c5\u03bb\u03b3\u03b1\u03c1\u03af\u03b1", "BR": "\u0392\u03c1\u03b1\u03b6\u03b9\u03bb\u03af\u03b1", "IO": "\u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ac \u0395\u03b4\u03ac\u03c6\u03b7 \u0399\u03bd\u03b4\u03b9\u03ba\u03bf\u03cd \u03a9\u03ba\u03b5\u03b1\u03bd\u03bf\u03cd", "VG": "\u0392\u03c1\u03b5\u03c4\u03b1\u03bd\u03b9\u03ba\u03ad\u03c2 \u03a0\u03b1\u03c1\u03b8\u03ad\u03bd\u03b5\u03c2 \u039d\u03ae\u03c3\u03bf\u03b9", "FR": "\u0393\u03b1\u03bb\u03bb\u03af\u03b1", "TF": "\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ac \u039d\u03cc\u03c4\u03b9\u03b1 \u0395\u03b4\u03ac\u03c6\u03b7", "GF": "\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ae \u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1", "PF": "\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ae \u03a0\u03bf\u03bb\u03c5\u03bd\u03b7\u03c3\u03af\u03b1", "DE": "\u0393\u03b5\u03c1\u03bc\u03b1\u03bd\u03af\u03b1", "GE": "\u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1", "GI": "\u0393\u03b9\u03b2\u03c1\u03b1\u03bb\u03c4\u03ac\u03c1", "GM": "\u0393\u03ba\u03ac\u03bc\u03c0\u03b9\u03b1", "GA": "\u0393\u03ba\u03b1\u03bc\u03c0\u03cc\u03bd", "GH": "\u0393\u03ba\u03ac\u03bd\u03b1", "GG": "\u0393\u03ba\u03ad\u03c1\u03bd\u03b6\u03b9", "GU": "\u0393\u03ba\u03bf\u03c5\u03ac\u03bc", "GP": "\u0393\u03bf\u03c5\u03b1\u03b4\u03b5\u03bb\u03bf\u03cd\u03c0\u03b7", "WF": "\u0393\u03bf\u03c5\u03ac\u03bb\u03b9\u03c2 \u03ba\u03b1\u03b9 \u03a6\u03bf\u03c5\u03c4\u03bf\u03cd\u03bd\u03b1", "GT": "\u0393\u03bf\u03c5\u03b1\u03c4\u03b5\u03bc\u03ac\u03bb\u03b1", "GY": "\u0393\u03bf\u03c5\u03b9\u03ac\u03bd\u03b1", "GN": "\u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1", "GW": "\u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1 \u039c\u03c0\u03b9\u03c3\u03ac\u03bf\u03c5", "GD": "\u0393\u03c1\u03b5\u03bd\u03ac\u03b4\u03b1", "GL": "\u0393\u03c1\u03bf\u03b9\u03bb\u03b1\u03bd\u03b4\u03af\u03b1", "DK": "\u0394\u03b1\u03bd\u03af\u03b1", "DO": "\u0394\u03bf\u03bc\u03b9\u03bd\u03b9\u03ba\u03b1\u03bd\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1", "EH": "\u0394\u03c5\u03c4\u03b9\u03ba\u03ae \u03a3\u03b1\u03c7\u03ac\u03c1\u03b1", "SV": "\u0395\u03bb \u03a3\u03b1\u03bb\u03b2\u03b1\u03b4\u03cc\u03c1", "CH": "\u0395\u03bb\u03b2\u03b5\u03c4\u03af\u03b1", "GR": "\u0395\u03bb\u03bb\u03ac\u03b4\u03b1", "ER": "\u0395\u03c1\u03c5\u03b8\u03c1\u03b1\u03af\u03b1", "EE": "\u0395\u03c3\u03b8\u03bf\u03bd\u03af\u03b1", "ZM": "\u0396\u03ac\u03bc\u03c0\u03b9\u03b1", "ZW": "\u0396\u03b9\u03bc\u03c0\u03ac\u03bc\u03c0\u03bf\u03c5\u03b5", "AE": "\u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03b1 \u0391\u03c1\u03b1\u03b2\u03b9\u03ba\u03ac \u0395\u03bc\u03b9\u03c1\u03ac\u03c4\u03b1", "US": "\u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03b5\u03c2 \u03a0\u03bf\u03bb\u03b9\u03c4\u03b5\u03af\u03b5\u03c2", "GB": "\u0397\u03bd\u03c9\u03bc\u03ad\u03bd\u03bf \u0392\u03b1\u03c3\u03af\u03bb\u03b5\u03b9\u03bf", "JP": "\u0399\u03b1\u03c0\u03c9\u03bd\u03af\u03b1", "IN": "\u0399\u03bd\u03b4\u03af\u03b1", "ID": "\u0399\u03bd\u03b4\u03bf\u03bd\u03b7\u03c3\u03af\u03b1", "JO": "\u0399\u03bf\u03c1\u03b4\u03b1\u03bd\u03af\u03b1", "IQ": "\u0399\u03c1\u03ac\u03ba", "IR": "\u0399\u03c1\u03ac\u03bd", "IE": "\u0399\u03c1\u03bb\u03b1\u03bd\u03b4\u03af\u03b1", "GQ": "\u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03ae \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1", "EC": "\u0399\u03c3\u03b7\u03bc\u03b5\u03c1\u03b9\u03bd\u03cc\u03c2", "IS": "\u0399\u03c3\u03bb\u03b1\u03bd\u03b4\u03af\u03b1", "ES": "\u0399\u03c3\u03c0\u03b1\u03bd\u03af\u03b1", "IL": "\u0399\u03c3\u03c1\u03b1\u03ae\u03bb", "IT": "\u0399\u03c4\u03b1\u03bb\u03af\u03b1", "KZ": "\u039a\u03b1\u03b6\u03b1\u03ba\u03c3\u03c4\u03ac\u03bd", "CM": "\u039a\u03b1\u03bc\u03b5\u03c1\u03bf\u03cd\u03bd", "KH": "\u039a\u03b1\u03bc\u03c0\u03cc\u03c4\u03b6\u03b7", "CA": "\u039a\u03b1\u03bd\u03b1\u03b4\u03ac\u03c2", "QA": "\u039a\u03b1\u03c4\u03ac\u03c1", "CF": "\u039a\u03b5\u03bd\u03c4\u03c1\u03bf\u03b1\u03c6\u03c1\u03b9\u03ba\u03b1\u03bd\u03b9\u03ba\u03ae \u0394\u03b7\u03bc\u03bf\u03ba\u03c1\u03b1\u03c4\u03af\u03b1", "KE": "\u039a\u03ad\u03bd\u03c5\u03b1", "CN": "\u039a\u03af\u03bd\u03b1", "KG": "\u039a\u03b9\u03c1\u03b3\u03b9\u03c3\u03c4\u03ac\u03bd", "KI": "\u039a\u03b9\u03c1\u03b9\u03bc\u03c0\u03ac\u03c4\u03b9", "CO": "\u039a\u03bf\u03bb\u03bf\u03bc\u03b2\u03af\u03b1", "KM": "\u039a\u03bf\u03bc\u03cc\u03c1\u03b5\u03c2", "CD": "\u039a\u03bf\u03bd\u03b3\u03ba\u03cc - \u039a\u03b9\u03bd\u03c3\u03ac\u03c3\u03b1", "CG": "\u039a\u03bf\u03bd\u03b3\u03ba\u03cc - \u039c\u03c0\u03c1\u03b1\u03b6\u03b1\u03b2\u03af\u03bb", "CR": "\u039a\u03cc\u03c3\u03c4\u03b1 \u03a1\u03af\u03ba\u03b1", "CU": "\u039a\u03bf\u03cd\u03b2\u03b1", "KW": "\u039a\u03bf\u03c5\u03b2\u03ad\u03b9\u03c4", "CW": "\u039a\u03bf\u03c5\u03c1\u03b1\u03c3\u03ac\u03bf", "HR": "\u039a\u03c1\u03bf\u03b1\u03c4\u03af\u03b1", "CY": "\u039a\u03cd\u03c0\u03c1\u03bf\u03c2", "LA": "\u039b\u03ac\u03bf\u03c2", "LS": "\u039b\u03b5\u03c3\u03cc\u03c4\u03bf", "LV": "\u039b\u03b5\u03c4\u03bf\u03bd\u03af\u03b1", "BY": "\u039b\u03b5\u03c5\u03ba\u03bf\u03c1\u03c9\u03c3\u03af\u03b1", "LB": "\u039b\u03af\u03b2\u03b1\u03bd\u03bf\u03c2", "LR": "\u039b\u03b9\u03b2\u03b5\u03c1\u03af\u03b1", "LY": "\u039b\u03b9\u03b2\u03cd\u03b7", "LT": "\u039b\u03b9\u03b8\u03bf\u03c5\u03b1\u03bd\u03af\u03b1", "LI": "\u039b\u03b9\u03c7\u03c4\u03b5\u03bd\u03c3\u03c4\u03ac\u03b9\u03bd", "LU": "\u039b\u03bf\u03c5\u03be\u03b5\u03bc\u03b2\u03bf\u03cd\u03c1\u03b3\u03bf", "YT": "\u039c\u03b1\u03b3\u03b9\u03cc\u03c4", "MG": "\u039c\u03b1\u03b4\u03b1\u03b3\u03b1\u03c3\u03ba\u03ac\u03c1\u03b7", "MO": "\u039c\u03b1\u03ba\u03ac\u03bf \u0395\u0394\u03a0 \u039a\u03af\u03bd\u03b1\u03c2", "MY": "\u039c\u03b1\u03bb\u03b1\u03b9\u03c3\u03af\u03b1", "MW": "\u039c\u03b1\u03bb\u03ac\u03bf\u03c5\u03b9", "MV": "\u039c\u03b1\u03bb\u03b4\u03af\u03b2\u03b5\u03c2", "ML": "\u039c\u03ac\u03bb\u03b9", "MT": "\u039c\u03ac\u03bb\u03c4\u03b1", "MA": "\u039c\u03b1\u03c1\u03cc\u03ba\u03bf", "MQ": "\u039c\u03b1\u03c1\u03c4\u03b9\u03bd\u03af\u03ba\u03b1", "MU": "\u039c\u03b1\u03c5\u03c1\u03af\u03ba\u03b9\u03bf\u03c2", "MR": "\u039c\u03b1\u03c5\u03c1\u03b9\u03c4\u03b1\u03bd\u03af\u03b1", "ME": "\u039c\u03b1\u03c5\u03c1\u03bf\u03b2\u03bf\u03cd\u03bd\u03b9\u03bf", "MX": "\u039c\u03b5\u03be\u03b9\u03ba\u03cc", "MM": "\u039c\u03b9\u03b1\u03bd\u03bc\u03ac\u03c1 (\u0392\u03b9\u03c1\u03bc\u03b1\u03bd\u03af\u03b1)", "MN": "\u039c\u03bf\u03b3\u03b3\u03bf\u03bb\u03af\u03b1", "MZ": "\u039c\u03bf\u03b6\u03b1\u03bc\u03b2\u03af\u03ba\u03b7", "MD": "\u039c\u03bf\u03bb\u03b4\u03b1\u03b2\u03af\u03b1", "MC": "\u039c\u03bf\u03bd\u03b1\u03ba\u03cc", "MS": "\u039c\u03bf\u03bd\u03c3\u03b5\u03c1\u03ac\u03c4", "BD": "\u039c\u03c0\u03b1\u03bd\u03b3\u03ba\u03bb\u03b1\u03bd\u03c4\u03ad\u03c2", "BB": "\u039c\u03c0\u03b1\u03c1\u03bc\u03c0\u03ad\u03b9\u03bd\u03c4\u03bf\u03c2", "BS": "\u039c\u03c0\u03b1\u03c7\u03ac\u03bc\u03b5\u03c2", "BH": "\u039c\u03c0\u03b1\u03c7\u03c1\u03ad\u03b9\u03bd", "BZ": "\u039c\u03c0\u03b5\u03bb\u03af\u03b6", "BJ": "\u039c\u03c0\u03b5\u03bd\u03af\u03bd", "BW": "\u039c\u03c0\u03bf\u03c4\u03c3\u03bf\u03c5\u03ac\u03bd\u03b1", "BF": "\u039c\u03c0\u03bf\u03c5\u03c1\u03ba\u03af\u03bd\u03b1 \u03a6\u03ac\u03c3\u03bf", "BI": "\u039c\u03c0\u03bf\u03c5\u03c1\u03bf\u03cd\u03bd\u03c4\u03b9", "BT": "\u039c\u03c0\u03bf\u03c5\u03c4\u03ac\u03bd", "BN": "\u039c\u03c0\u03c1\u03bf\u03c5\u03bd\u03ad\u03b9", "NA": "\u039d\u03b1\u03bc\u03af\u03bc\u03c0\u03b9\u03b1", "NR": "\u039d\u03b1\u03bf\u03c5\u03c1\u03bf\u03cd", "NZ": "\u039d\u03ad\u03b1 \u0396\u03b7\u03bb\u03b1\u03bd\u03b4\u03af\u03b1", "NC": "\u039d\u03ad\u03b1 \u039a\u03b1\u03bb\u03b7\u03b4\u03bf\u03bd\u03af\u03b1", "NP": "\u039d\u03b5\u03c0\u03ac\u03bb", "KY": "\u039d\u03ae\u03c3\u03bf\u03b9 \u039a\u03ad\u03b9\u03bc\u03b1\u03bd", "CC": "\u039d\u03ae\u03c3\u03bf\u03b9 \u039a\u03cc\u03ba\u03bf\u03c2 (\u039a\u03af\u03bb\u03b9\u03bd\u03b3\u03ba)", "CK": "\u039d\u03ae\u03c3\u03bf\u03b9 \u039a\u03bf\u03c5\u03ba", "GS": "\u039d\u03ae\u03c3\u03bf\u03b9 \u039d\u03cc\u03c4\u03b9\u03b1 \u0393\u03b5\u03c9\u03c1\u03b3\u03af\u03b1 \u03ba\u03b1\u03b9 \u039d\u03cc\u03c4\u03b9\u03b5\u03c2 \u03a3\u03ac\u03bd\u03c4\u03bf\u03c5\u03b9\u03c4\u03c2", "AX": "\u039d\u03ae\u03c3\u03bf\u03b9 \u038c\u03bb\u03b1\u03bd\u03c4", "PN": "\u039d\u03ae\u03c3\u03bf\u03b9 \u03a0\u03af\u03c4\u03ba\u03b5\u03c1\u03bd", "SB": "\u039d\u03ae\u03c3\u03bf\u03b9 \u03a3\u03bf\u03bb\u03bf\u03bc\u03ce\u03bd\u03c4\u03bf\u03c2", "TC": "\u039d\u03ae\u03c3\u03bf\u03b9 \u03a4\u03b5\u03c1\u03ba\u03c2 \u03ba\u03b1\u03b9 \u039a\u03ac\u03b9\u03ba\u03bf\u03c2", "FO": "\u039d\u03ae\u03c3\u03bf\u03b9 \u03a6\u03b5\u03c1\u03cc\u03b5\u03c2", "FK": "\u039d\u03ae\u03c3\u03bf\u03b9 \u03a6\u03cc\u03ba\u03bb\u03b1\u03bd\u03c4", "HM": "\u039d\u03ae\u03c3\u03bf\u03b9 \u03a7\u03b5\u03c1\u03bd\u03c4 \u03ba\u03b1\u03b9 \u039c\u03b1\u03ba\u03bd\u03c4\u03cc\u03bd\u03b1\u03bb\u03bd\u03c4", "BV": "\u039d\u03ae\u03c3\u03bf\u03c2 \u039c\u03c0\u03bf\u03c5\u03b2\u03ad", "NF": "\u039d\u03ae\u03c3\u03bf\u03c2 \u039d\u03cc\u03c1\u03c6\u03bf\u03bb\u03ba", "IM": "\u039d\u03ae\u03c3\u03bf\u03c2 \u03c4\u03bf\u03c5 \u039c\u03b1\u03bd", "CX": "\u039d\u03ae\u03c3\u03bf\u03c2 \u03c4\u03c9\u03bd \u03a7\u03c1\u03b9\u03c3\u03c4\u03bf\u03c5\u03b3\u03ad\u03bd\u03bd\u03c9\u03bd", "NE": "\u039d\u03af\u03b3\u03b7\u03c1\u03b1\u03c2", "NG": "\u039d\u03b9\u03b3\u03b7\u03c1\u03af\u03b1", "NI": "\u039d\u03b9\u03ba\u03b1\u03c1\u03ac\u03b3\u03bf\u03c5\u03b1", "NU": "\u039d\u03b9\u03bf\u03cd\u03b5", "NO": "\u039d\u03bf\u03c1\u03b2\u03b7\u03b3\u03af\u03b1", "ZA": "\u039d\u03cc\u03c4\u03b9\u03b1 \u0391\u03c6\u03c1\u03b9\u03ba\u03ae", "KR": "\u039d\u03cc\u03c4\u03b9\u03b1 \u039a\u03bf\u03c1\u03ad\u03b1", "SS": "\u039d\u03cc\u03c4\u03b9\u03bf \u03a3\u03bf\u03c5\u03b4\u03ac\u03bd", "DM": "\u039d\u03c4\u03bf\u03bc\u03af\u03bd\u03b9\u03ba\u03b1", "NL": "\u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03af\u03b1", "BQ": "\u039f\u03bb\u03bb\u03b1\u03bd\u03b4\u03af\u03b1 \u039a\u03b1\u03c1\u03b1\u03ca\u03b2\u03b9\u03ba\u03ae\u03c2", "OM": "\u039f\u03bc\u03ac\u03bd", "HN": "\u039f\u03bd\u03b4\u03bf\u03cd\u03c1\u03b1", "HU": "\u039f\u03c5\u03b3\u03b3\u03b1\u03c1\u03af\u03b1", "UG": "\u039f\u03c5\u03b3\u03ba\u03ac\u03bd\u03c4\u03b1", "UZ": "\u039f\u03c5\u03b6\u03bc\u03c0\u03b5\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd", "UA": "\u039f\u03c5\u03ba\u03c1\u03b1\u03bd\u03af\u03b1", "UY": "\u039f\u03c5\u03c1\u03bf\u03c5\u03b3\u03bf\u03c5\u03ac\u03b7", "PK": "\u03a0\u03b1\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd", "PW": "\u03a0\u03b1\u03bb\u03ac\u03bf\u03c5", "PA": "\u03a0\u03b1\u03bd\u03b1\u03bc\u03ac\u03c2", "PG": "\u03a0\u03b1\u03c0\u03bf\u03cd\u03b1 \u039d\u03ad\u03b1 \u0393\u03bf\u03c5\u03b9\u03bd\u03ad\u03b1", "PY": "\u03a0\u03b1\u03c1\u03b1\u03b3\u03bf\u03c5\u03ac\u03b7", "PE": "\u03a0\u03b5\u03c1\u03bf\u03cd", "PL": "\u03a0\u03bf\u03bb\u03c9\u03bd\u03af\u03b1", "PT": "\u03a0\u03bf\u03c1\u03c4\u03bf\u03b3\u03b1\u03bb\u03af\u03b1", "PR": "\u03a0\u03bf\u03c5\u03ad\u03c1\u03c4\u03bf \u03a1\u03af\u03ba\u03bf", "CV": "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf \u0391\u03ba\u03c1\u03c9\u03c4\u03ae\u03c1\u03b9\u03bf", "RE": "\u03a1\u03b5\u03ca\u03bd\u03b9\u03cc\u03bd", "RW": "\u03a1\u03bf\u03c5\u03ac\u03bd\u03c4\u03b1", "RO": "\u03a1\u03bf\u03c5\u03bc\u03b1\u03bd\u03af\u03b1", "RU": "\u03a1\u03c9\u03c3\u03af\u03b1", "WS": "\u03a3\u03b1\u03bc\u03cc\u03b1", "ST": "\u03a3\u03ac\u03bf \u03a4\u03bf\u03bc\u03ad \u03ba\u03b1\u03b9 \u03a0\u03c1\u03af\u03bd\u03c3\u03b9\u03c0\u03b5", "SA": "\u03a3\u03b1\u03bf\u03c5\u03b4\u03b9\u03ba\u03ae \u0391\u03c1\u03b1\u03b2\u03af\u03b1", "SJ": "\u03a3\u03b2\u03ac\u03bb\u03bc\u03c0\u03b1\u03c1\u03bd\u03c4 \u03ba\u03b1\u03b9 \u0393\u03b9\u03b1\u03bd \u039c\u03b1\u03b3\u03b9\u03ad\u03bd", "KN": "\u03a3\u03b5\u03bd \u039a\u03b9\u03c4\u03c2 \u03ba\u03b1\u03b9 \u039d\u03ad\u03b2\u03b9\u03c2", "PM": "\u03a3\u03b5\u03bd \u03a0\u03b9\u03b5\u03c1 \u03ba\u03b1\u03b9 \u039c\u03b9\u03ba\u03b5\u03bb\u03cc\u03bd", "SN": "\u03a3\u03b5\u03bd\u03b5\u03b3\u03ac\u03bb\u03b7", "RS": "\u03a3\u03b5\u03c1\u03b2\u03af\u03b1", "SC": "\u03a3\u03b5\u03cb\u03c7\u03ad\u03bb\u03bb\u03b5\u03c2", "SG": "\u03a3\u03b9\u03b3\u03ba\u03b1\u03c0\u03bf\u03cd\u03c1\u03b7", "SL": "\u03a3\u03b9\u03ad\u03c1\u03b1 \u039b\u03b5\u03cc\u03bd\u03b5", "SK": "\u03a3\u03bb\u03bf\u03b2\u03b1\u03ba\u03af\u03b1", "SI": "\u03a3\u03bb\u03bf\u03b2\u03b5\u03bd\u03af\u03b1", "SO": "\u03a3\u03bf\u03bc\u03b1\u03bb\u03af\u03b1", "SZ": "\u03a3\u03bf\u03c5\u03b1\u03b6\u03b9\u03bb\u03ac\u03bd\u03b4\u03b7", "SD": "\u03a3\u03bf\u03c5\u03b4\u03ac\u03bd", "SE": "\u03a3\u03bf\u03c5\u03b7\u03b4\u03af\u03b1", "SR": "\u03a3\u03bf\u03c5\u03c1\u03b9\u03bd\u03ac\u03bc", "LK": "\u03a3\u03c1\u03b9 \u039b\u03ac\u03bd\u03ba\u03b1", "SY": "\u03a3\u03c5\u03c1\u03af\u03b1", "TW": "\u03a4\u03b1\u03ca\u03b2\u03ac\u03bd", "TH": "\u03a4\u03b1\u03ca\u03bb\u03ac\u03bd\u03b4\u03b7", "TZ": "\u03a4\u03b1\u03bd\u03b6\u03b1\u03bd\u03af\u03b1", "TJ": "\u03a4\u03b1\u03c4\u03b6\u03b9\u03ba\u03b9\u03c3\u03c4\u03ac\u03bd", "JM": "\u03a4\u03b6\u03b1\u03bc\u03ac\u03b9\u03ba\u03b1", "DJ": "\u03a4\u03b6\u03b9\u03bc\u03c0\u03bf\u03c5\u03c4\u03af", "TL": "\u03a4\u03b9\u03bc\u03cc\u03c1-\u039b\u03ad\u03c3\u03c4\u03b5", "TG": "\u03a4\u03cc\u03b3\u03ba\u03bf", "TK": "\u03a4\u03bf\u03ba\u03b5\u03bb\u03ac\u03bf\u03c5", "TO": "\u03a4\u03cc\u03bd\u03b3\u03ba\u03b1", "TR": "\u03a4\u03bf\u03c5\u03c1\u03ba\u03af\u03b1", "TM": "\u03a4\u03bf\u03c5\u03c1\u03ba\u03bc\u03b5\u03bd\u03b9\u03c3\u03c4\u03ac\u03bd", "TT": "\u03a4\u03c1\u03b9\u03bd\u03b9\u03bd\u03c4\u03ac\u03bd\u03c4 \u03ba\u03b1\u03b9 \u03a4\u03bf\u03bc\u03c0\u03ac\u03b3\u03ba\u03bf", "TD": "\u03a4\u03c3\u03b1\u03bd\u03c4", "CZ": "\u03a4\u03c3\u03b5\u03c7\u03af\u03b1", "TN": "\u03a4\u03c5\u03bd\u03b7\u03c3\u03af\u03b1", "YE": "\u03a5\u03b5\u03bc\u03ad\u03bd\u03b7", "PH": "\u03a6\u03b9\u03bb\u03b9\u03c0\u03c0\u03af\u03bd\u03b5\u03c2", "FI": "\u03a6\u03b9\u03bd\u03bb\u03b1\u03bd\u03b4\u03af\u03b1", "FJ": "\u03a6\u03af\u03c4\u03b6\u03b9", "CL": "\u03a7\u03b9\u03bb\u03ae", "HK": "\u03a7\u03bf\u03bd\u03b3\u03ba \u039a\u03bf\u03bd\u03b3\u03ba \u0395\u0394\u03a0 \u039a\u03af\u03bd\u03b1\u03c2"}onionshare-2.6.3/desktop/onionshare/resources/countries/en.json000066400000000000000000000112451475545702100250440ustar00rootroot00000000000000{"AF": "Afghanistan", "AX": "\u00c5land Islands", "AL": "Albania", "DZ": "Algeria", "AS": "American Samoa", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarctica", "AG": "Antigua & Barbuda", "AR": "Argentina", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "AZ": "Azerbaijan", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BY": "Belarus", "BE": "Belgium", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnia & Herzegovina", "BW": "Botswana", "BV": "Bouvet Island", "BR": "Brazil", "IO": "British Indian Ocean Territory", "VG": "British Virgin Islands", "BN": "Brunei", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "KH": "Cambodia", "CM": "Cameroon", "CA": "Canada", "CV": "Cape Verde", "BQ": "Caribbean Netherlands", "KY": "Cayman Islands", "CF": "Central African Republic", "TD": "Chad", "CL": "Chile", "CN": "China", "CX": "Christmas Island", "CC": "Cocos (Keeling) Islands", "CO": "Colombia", "KM": "Comoros", "CG": "Congo - Brazzaville", "CD": "Congo - Kinshasa", "CK": "Cook Islands", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire", "HR": "Croatia", "CU": "Cuba", "CW": "Cura\u00e7ao", "CY": "Cyprus", "CZ": "Czechia", "DK": "Denmark", "DJ": "Djibouti", "DM": "Dominica", "DO": "Dominican Republic", "EC": "Ecuador", "EG": "Egypt", "SV": "El Salvador", "GQ": "Equatorial Guinea", "ER": "Eritrea", "EE": "Estonia", "SZ": "Eswatini", "ET": "Ethiopia", "FK": "Falkland Islands", "FO": "Faroe Islands", "FJ": "Fiji", "FI": "Finland", "FR": "France", "GF": "French Guiana", "PF": "French Polynesia", "TF": "French Southern Territories", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "DE": "Germany", "GH": "Ghana", "GI": "Gibraltar", "GR": "Greece", "GL": "Greenland", "GD": "Grenada", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard & McDonald Islands", "HN": "Honduras", "HK": "Hong Kong SAR China", "HU": "Hungary", "IS": "Iceland", "IN": "India", "ID": "Indonesia", "IR": "Iran", "IQ": "Iraq", "IE": "Ireland", "IM": "Isle of Man", "IL": "Israel", "IT": "Italy", "JM": "Jamaica", "JP": "Japan", "JO": "Jordan", "KZ": "Kazakhstan", "KE": "Kenya", "KI": "Kiribati", "KW": "Kuwait", "KG": "Kyrgyzstan", "LA": "Laos", "LV": "Latvia", "LB": "Lebanon", "LS": "Lesotho", "LR": "Liberia", "LY": "Libya", "LI": "Liechtenstein", "LT": "Lithuania", "LU": "Luxembourg", "MO": "Macao SAR China", "MG": "Madagascar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldives", "ML": "Mali", "MT": "Malta", "MQ": "Martinique", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexico", "MD": "Moldova", "MC": "Monaco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MA": "Morocco", "MZ": "Mozambique", "MM": "Myanmar (Burma)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NL": "Netherlands", "NC": "New Caledonia", "NZ": "New Zealand", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "NF": "Norfolk Island", "KP": "North Korea", "MK": "North Macedonia", "NO": "Norway", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua New Guinea", "PY": "Paraguay", "PE": "Peru", "PH": "Philippines", "PN": "Pitcairn Islands", "PL": "Poland", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "RE": "R\u00e9union", "RO": "Romania", "RU": "Russia", "RW": "Rwanda", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 & Pr\u00edncipe", "SA": "Saudi Arabia", "SN": "Senegal", "RS": "Serbia", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakia", "SI": "Slovenia", "SB": "Solomon Islands", "SO": "Somalia", "ZA": "South Africa", "GS": "South Georgia & South Sandwich Islands", "KR": "South Korea", "SS": "South Sudan", "ES": "Spain", "LK": "Sri Lanka", "BL": "St. Barth\u00e9lemy", "SH": "St. Helena", "KN": "St. Kitts & Nevis", "LC": "St. Lucia", "MF": "St. Martin", "PM": "St. Pierre & Miquelon", "VC": "St. Vincent & Grenadines", "SD": "Sudan", "SR": "Suriname", "SJ": "Svalbard & Jan Mayen", "SE": "Sweden", "CH": "Switzerland", "SY": "Syria", "TW": "Taiwan", "TJ": "Tajikistan", "TZ": "Tanzania", "TH": "Thailand", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad & Tobago", "TN": "Tunisia", "TR": "Turkey", "TM": "Turkmenistan", "TC": "Turks & Caicos Islands", "VI": "U.S. Virgin Islands", "UG": "Uganda", "UA": "Ukraine", "AE": "United Arab Emirates", "GB": "United Kingdom", "US": "United States", "UY": "Uruguay", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatican City", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis & Futuna", "EH": "Western Sahara", "YE": "Yemen", "ZM": "Zambia", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/es.json000066400000000000000000000117701475545702100250540ustar00rootroot00000000000000{"AF": "Afganist\u00e1n", "AL": "Albania", "DE": "Alemania", "AD": "Andorra", "AO": "Angola", "AI": "Anguila", "AQ": "Ant\u00e1rtida", "AG": "Antigua y Barbuda", "SA": "Arabia Saud\u00ed", "DZ": "Argelia", "AR": "Argentina", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "AZ": "Azerbaiy\u00e1n", "BS": "Bahamas", "BD": "Banglad\u00e9s", "BB": "Barbados", "BH": "Bar\u00e9in", "BE": "B\u00e9lgica", "BZ": "Belice", "BJ": "Ben\u00edn", "BM": "Bermudas", "BY": "Bielorrusia", "BO": "Bolivia", "BA": "Bosnia y Herzegovina", "BW": "Botsuana", "BR": "Brasil", "BN": "Brun\u00e9i", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "BT": "But\u00e1n", "CV": "Cabo Verde", "KH": "Camboya", "CM": "Camer\u00fan", "CA": "Canad\u00e1", "BQ": "Caribe neerland\u00e9s", "QA": "Catar", "TD": "Chad", "CZ": "Chequia", "CL": "Chile", "CN": "China", "CY": "Chipre", "VA": "Ciudad del Vaticano", "CO": "Colombia", "KM": "Comoras", "CG": "Congo", "KP": "Corea del Norte", "KR": "Corea del Sur", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire", "HR": "Croacia", "CU": "Cuba", "CW": "Curazao", "DK": "Dinamarca", "DM": "Dominica", "EC": "Ecuador", "EG": "Egipto", "SV": "El Salvador", "AE": "Emiratos \u00c1rabes Unidos", "ER": "Eritrea", "SK": "Eslovaquia", "SI": "Eslovenia", "ES": "Espa\u00f1a", "US": "Estados Unidos", "EE": "Estonia", "SZ": "Esuatini", "ET": "Etiop\u00eda", "PH": "Filipinas", "FI": "Finlandia", "FJ": "Fiyi", "FR": "Francia", "GA": "Gab\u00f3n", "GM": "Gambia", "GE": "Georgia", "GH": "Ghana", "GI": "Gibraltar", "GD": "Granada", "GR": "Grecia", "GL": "Groenlandia", "GP": "Guadalupe", "GU": "Guam", "GT": "Guatemala", "GF": "Guayana Francesa", "GG": "Guernsey", "GN": "Guinea", "GQ": "Guinea Ecuatorial", "GW": "Guinea-Bis\u00e1u", "GY": "Guyana", "HT": "Hait\u00ed", "HN": "Honduras", "HU": "Hungr\u00eda", "IN": "India", "ID": "Indonesia", "IQ": "Irak", "IR": "Ir\u00e1n", "IE": "Irlanda", "BV": "Isla Bouvet", "IM": "Isla de Man", "CX": "Isla de Navidad", "NF": "Isla Norfolk", "IS": "Islandia", "AX": "Islas \u00c5land", "KY": "Islas Caim\u00e1n", "CC": "Islas Cocos", "CK": "Islas Cook", "FO": "Islas Feroe", "GS": "Islas Georgia del Sur y Sandwich del Sur", "HM": "Islas Heard y McDonald", "FK": "Islas Malvinas", "PN": "Islas Pitcairn", "SB": "Islas Salom\u00f3n", "TC": "Islas Turcas y Caicos", "VG": "Islas V\u00edrgenes Brit\u00e1nicas", "VI": "Islas V\u00edrgenes de EE. UU.", "IL": "Israel", "IT": "Italia", "JM": "Jamaica", "JP": "Jap\u00f3n", "JO": "Jordania", "KZ": "Kazajist\u00e1n", "KE": "Kenia", "KG": "Kirguist\u00e1n", "KI": "Kiribati", "KW": "Kuwait", "LA": "Laos", "LS": "Lesoto", "LV": "Letonia", "LB": "L\u00edbano", "LR": "Liberia", "LY": "Libia", "LI": "Liechtenstein", "LT": "Lituania", "LU": "Luxemburgo", "MK": "Macedonia del Norte", "MG": "Madagascar", "MY": "Malasia", "MW": "Malaui", "MV": "Maldivas", "ML": "Mali", "MT": "Malta", "MA": "Marruecos", "MQ": "Martinica", "MU": "Mauricio", "MR": "Mauritania", "YT": "Mayotte", "MX": "M\u00e9xico", "MD": "Moldavia", "MC": "M\u00f3naco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mozambique", "MM": "Myanmar (Birmania)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicaragua", "NE": "N\u00edger", "NG": "Nigeria", "NU": "Niue", "NO": "Noruega", "NC": "Nueva Caledonia", "NZ": "Nueva Zelanda", "OM": "Om\u00e1n", "NL": "Pa\u00edses Bajos", "PK": "Pakist\u00e1n", "PW": "Palaos", "PA": "Panam\u00e1", "PG": "Pap\u00faa Nueva Guinea", "PY": "Paraguay", "PE": "Per\u00fa", "PF": "Polinesia Francesa", "PL": "Polonia", "PT": "Portugal", "PR": "Puerto Rico", "HK": "RAE de Hong Kong (China)", "MO": "RAE de Macao (China)", "GB": "Reino Unido", "CF": "Rep\u00fablica Centroafricana", "CD": "Rep\u00fablica Democr\u00e1tica del Congo", "DO": "Rep\u00fablica Dominicana", "RE": "Reuni\u00f3n", "RW": "Ruanda", "RO": "Ruman\u00eda", "RU": "Rusia", "EH": "S\u00e1hara Occidental", "WS": "Samoa", "AS": "Samoa Americana", "BL": "San Bartolom\u00e9", "KN": "San Crist\u00f3bal y Nieves", "SM": "San Marino", "MF": "San Mart\u00edn", "PM": "San Pedro y Miquel\u00f3n", "VC": "San Vicente y las Granadinas", "SH": "Santa Elena", "LC": "Santa Luc\u00eda", "ST": "Santo Tom\u00e9 y Pr\u00edncipe", "SN": "Senegal", "RS": "Serbia", "SC": "Seychelles", "SL": "Sierra Leona", "SG": "Singapur", "SX": "Sint Maarten", "SY": "Siria", "SO": "Somalia", "LK": "Sri Lanka", "ZA": "Sud\u00e1frica", "SD": "Sud\u00e1n", "SS": "Sud\u00e1n del Sur", "SE": "Suecia", "CH": "Suiza", "SR": "Surinam", "SJ": "Svalbard y Jan Mayen", "TH": "Tailandia", "TW": "Taiw\u00e1n", "TZ": "Tanzania", "TJ": "Tayikist\u00e1n", "IO": "Territorio Brit\u00e1nico del Oc\u00e9ano \u00cdndico", "TF": "Territorios Australes Franceses", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad y Tobago", "TN": "T\u00fanez", "TM": "Turkmenist\u00e1n", "TR": "Turqu\u00eda", "UA": "Ucrania", "UG": "Uganda", "UY": "Uruguay", "UZ": "Uzbekist\u00e1n", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis y Futuna", "YE": "Yemen", "DJ": "Yibuti", "ZM": "Zambia", "ZW": "Zimbabue"}onionshare-2.6.3/desktop/onionshare/resources/countries/fa.json000066400000000000000000000333561475545702100250370ustar00rootroot00000000000000{"AR": "\u0622\u0631\u0698\u0627\u0646\u062a\u06cc\u0646", "AW": "\u0622\u0631\u0648\u0628\u0627", "AL": "\u0622\u0644\u0628\u0627\u0646\u06cc", "DE": "\u0622\u0644\u0645\u0627\u0646", "AG": "\u0622\u0646\u062a\u06cc\u06af\u0648\u0627 \u0648 \u0628\u0627\u0631\u0628\u0648\u062f\u0627", "AD": "\u0622\u0646\u062f\u0648\u0631\u0627", "AO": "\u0622\u0646\u06af\u0648\u0644\u0627", "AI": "\u0622\u0646\u06af\u0648\u06cc\u0644\u0627", "AT": "\u0627\u062a\u0631\u06cc\u0634", "ET": "\u0627\u062a\u06cc\u0648\u067e\u06cc", "JO": "\u0627\u0631\u062f\u0646", "AM": "\u0627\u0631\u0645\u0646\u0633\u062a\u0627\u0646", "UY": "\u0627\u0631\u0648\u06af\u0648\u0626\u0647", "ER": "\u0627\u0631\u06cc\u062a\u0631\u0647", "UZ": "\u0627\u0632\u0628\u06a9\u0633\u062a\u0627\u0646", "ES": "\u0627\u0633\u067e\u0627\u0646\u06cc\u0627", "AU": "\u0627\u0633\u062a\u0631\u0627\u0644\u06cc\u0627", "EE": "\u0627\u0633\u062a\u0648\u0646\u06cc", "IL": "\u0627\u0633\u0631\u0627\u0626\u06cc\u0644", "SK": "\u0627\u0633\u0644\u0648\u0627\u06a9\u06cc", "SI": "\u0627\u0633\u0644\u0648\u0648\u0646\u06cc", "SZ": "\u0627\u0633\u0648\u0627\u062a\u06cc\u0646\u06cc", "ZA": "\u0627\u0641\u0631\u06cc\u0642\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc", "AF": "\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646", "EC": "\u0627\u06a9\u0648\u0627\u062f\u0648\u0631", "DZ": "\u0627\u0644\u062c\u0632\u0627\u06cc\u0631", "SV": "\u0627\u0644\u0633\u0627\u0644\u0648\u0627\u062f\u0648\u0631", "AE": "\u0627\u0645\u0627\u0631\u0627\u062a \u0645\u062a\u062d\u062f\u0647\u0654 \u0639\u0631\u0628\u06cc", "ID": "\u0627\u0646\u062f\u0648\u0646\u0632\u06cc", "UA": "\u0627\u0648\u06a9\u0631\u0627\u06cc\u0646", "UG": "\u0627\u0648\u06af\u0627\u0646\u062f\u0627", "US": "\u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647", "IT": "\u0627\u06cc\u062a\u0627\u0644\u06cc\u0627", "IR": "\u0627\u06cc\u0631\u0627\u0646", "IE": "\u0627\u06cc\u0631\u0644\u0646\u062f", "IS": "\u0627\u06cc\u0633\u0644\u0646\u062f", "BB": "\u0628\u0627\u0631\u0628\u0627\u062f\u0648\u0633", "BS": "\u0628\u0627\u0647\u0627\u0645\u0627", "BH": "\u0628\u062d\u0631\u06cc\u0646", "BR": "\u0628\u0631\u0632\u06cc\u0644", "BM": "\u0628\u0631\u0645\u0648\u062f\u0627", "BN": "\u0628\u0631\u0648\u0646\u0626\u06cc", "GB": "\u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627", "BY": "\u0628\u0644\u0627\u0631\u0648\u0633", "BE": "\u0628\u0644\u0698\u06cc\u06a9", "BG": "\u0628\u0644\u063a\u0627\u0631\u0633\u062a\u0627\u0646", "BZ": "\u0628\u0644\u06cc\u0632", "BD": "\u0628\u0646\u06af\u0644\u0627\u062f\u0634", "BJ": "\u0628\u0646\u06cc\u0646", "BT": "\u0628\u0648\u062a\u0627\u0646", "BW": "\u0628\u0648\u062a\u0633\u0648\u0627\u0646\u0627", "BF": "\u0628\u0648\u0631\u06a9\u06cc\u0646\u0627\u0641\u0627\u0633\u0648", "BI": "\u0628\u0648\u0631\u0648\u0646\u062f\u06cc", "BA": "\u0628\u0648\u0633\u0646\u06cc \u0648 \u0647\u0631\u0632\u06af\u0648\u06cc\u0646", "BO": "\u0628\u0648\u0644\u06cc\u0648\u06cc", "PG": "\u067e\u0627\u067e\u0648\u0627 \u06af\u06cc\u0646\u0647\u0654 \u0646\u0648", "PY": "\u067e\u0627\u0631\u0627\u06af\u0648\u0626\u0647", "PK": "\u067e\u0627\u06a9\u0633\u062a\u0627\u0646", "PW": "\u067e\u0627\u0644\u0627\u0626\u0648", "PA": "\u067e\u0627\u0646\u0627\u0645\u0627", "PT": "\u067e\u0631\u062a\u063a\u0627\u0644", "PE": "\u067e\u0631\u0648", "PF": "\u067e\u0644\u06cc\u200c\u0646\u0632\u06cc \u0641\u0631\u0627\u0646\u0633\u0647", "PR": "\u067e\u0648\u0631\u062a\u0648\u0631\u06cc\u06a9\u0648", "TJ": "\u062a\u0627\u062c\u06cc\u06a9\u0633\u062a\u0627\u0646", "TZ": "\u062a\u0627\u0646\u0632\u0627\u0646\u06cc\u0627", "TH": "\u062a\u0627\u06cc\u0644\u0646\u062f", "TW": "\u062a\u0627\u06cc\u0648\u0627\u0646", "TM": "\u062a\u0631\u06a9\u0645\u0646\u0633\u062a\u0627\u0646", "TR": "\u062a\u0631\u06a9\u06cc\u0647", "TT": "\u062a\u0631\u06cc\u0646\u06cc\u062f\u0627\u062f \u0648 \u062a\u0648\u0628\u0627\u06af\u0648", "TK": "\u062a\u0648\u06a9\u0644\u0627\u0626\u0648", "TG": "\u062a\u0648\u06af\u0648", "TN": "\u062a\u0648\u0646\u0633", "TO": "\u062a\u0648\u0646\u06af\u0627", "TL": "\u062a\u06cc\u0645\u0648\u0631-\u0644\u0633\u062a\u0647", "JM": "\u062c\u0627\u0645\u0627\u0626\u06cc\u06a9\u0627", "GI": "\u062c\u0628\u0644\u200c\u0627\u0644\u0637\u0627\u0631\u0642", "AX": "\u062c\u0632\u0627\u06cc\u0631 \u0622\u0644\u0627\u0646\u062f", "PN": "\u062c\u0632\u0627\u06cc\u0631 \u067e\u06cc\u062a\u200c\u06a9\u0631\u0646", "TC": "\u062c\u0632\u0627\u06cc\u0631 \u062a\u0648\u0631\u06a9\u0633 \u0648 \u06a9\u0627\u06cc\u06a9\u0648\u0633", "SB": "\u062c\u0632\u0627\u06cc\u0631 \u0633\u0644\u06cc\u0645\u0627\u0646", "FO": "\u062c\u0632\u0627\u06cc\u0631 \u0641\u0627\u0631\u0648", "FK": "\u062c\u0632\u0627\u06cc\u0631 \u0641\u0627\u0644\u06a9\u0644\u0646\u062f", "BQ": "\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0627\u0631\u0627\u0626\u06cc\u0628 \u0647\u0644\u0646\u062f", "CK": "\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0648\u06a9", "CC": "\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0648\u06a9\u0648\u0633", "KY": "\u062c\u0632\u0627\u06cc\u0631 \u06a9\u0650\u06cc\u0645\u0646", "VI": "\u062c\u0632\u0627\u06cc\u0631 \u0648\u06cc\u0631\u062c\u06cc\u0646 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647", "VG": "\u062c\u0632\u0627\u06cc\u0631 \u0648\u06cc\u0631\u062c\u06cc\u0646 \u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627", "BV": "\u062c\u0632\u06cc\u0631\u0647\u0654 \u0628\u0648\u0648\u0647", "CX": "\u062c\u0632\u06cc\u0631\u0647\u0654 \u06a9\u0631\u06cc\u0633\u0645\u0633", "IM": "\u062c\u0632\u06cc\u0631\u0647\u0654 \u0645\u0646", "NF": "\u062c\u0632\u06cc\u0631\u0647\u0654 \u0646\u0648\u0631\u0641\u0648\u0644\u06a9", "AZ": "\u062c\u0645\u0647\u0648\u0631\u06cc \u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646", "CF": "\u062c\u0645\u0647\u0648\u0631\u06cc \u0627\u0641\u0631\u06cc\u0642\u0627\u06cc \u0645\u0631\u06a9\u0632\u06cc", "DO": "\u062c\u0645\u0647\u0648\u0631\u06cc \u062f\u0648\u0645\u06cc\u0646\u06cc\u06a9\u0646", "AQ": "\u062c\u0646\u0648\u0628\u06af\u0627\u0646", "GS": "\u062c\u0648\u0631\u062c\u06cc\u0627\u06cc \u062c\u0646\u0648\u0628\u06cc \u0648 \u062c\u0632\u0627\u06cc\u0631 \u0633\u0627\u0646\u062f\u0648\u06cc\u0686 \u062c\u0646\u0648\u0628\u06cc", "DJ": "\u062c\u06cc\u0628\u0648\u062a\u06cc", "TD": "\u0686\u0627\u062f", "CZ": "\u0686\u06a9", "CN": "\u0686\u06cc\u0646", "DK": "\u062f\u0627\u0646\u0645\u0627\u0631\u06a9", "DM": "\u062f\u0648\u0645\u06cc\u0646\u06cc\u06a9\u0627", "RE": "\u0631\u0626\u0648\u0646\u06cc\u0648\u0646", "RW": "\u0631\u0648\u0627\u0646\u062f\u0627", "RU": "\u0631\u0648\u0633\u06cc\u0647", "RO": "\u0631\u0648\u0645\u0627\u0646\u06cc", "ZM": "\u0632\u0627\u0645\u0628\u06cc\u0627", "ZW": "\u0632\u06cc\u0645\u0628\u0627\u0628\u0648\u0647", "JP": "\u0698\u0627\u067e\u0646", "ST": "\u0633\u0627\u0626\u0648\u062a\u0648\u0645\u0647 \u0648 \u067e\u0631\u06cc\u0646\u0633\u06cc\u067e", "CI": "\u0633\u0627\u062d\u0644 \u0639\u0627\u062c", "WS": "\u0633\u0627\u0645\u0648\u0622", "AS": "\u0633\u0627\u0645\u0648\u0622\u06cc \u0627\u0645\u0631\u06cc\u06a9\u0627", "SM": "\u0633\u0627\u0646\u200c\u0645\u0627\u0631\u06cc\u0646\u0648", "TF": "\u0633\u0631\u0632\u0645\u06cc\u0646\u200c\u0647\u0627\u06cc \u062c\u0646\u0648\u0628 \u0641\u0631\u0627\u0646\u0633\u0647", "LK": "\u0633\u0631\u06cc\u200c\u0644\u0627\u0646\u06a9\u0627", "BL": "\u0633\u0646 \u0628\u0627\u0631\u062a\u0644\u0645\u06cc", "PM": "\u0633\u0646 \u067e\u06cc\u0631 \u0648 \u0645\u06cc\u06a9\u0644\u0646", "KN": "\u0633\u0646\u062a \u06a9\u06cc\u062a\u0633 \u0648 \u0646\u0648\u06cc\u0633", "LC": "\u0633\u0646\u062a \u0644\u0648\u0633\u06cc\u0627", "SX": "\u0633\u0646\u062a \u0645\u0627\u0631\u062a\u0646", "MF": "\u0633\u0646\u062a \u0645\u0627\u0631\u062a\u06cc\u0646", "VC": "\u0633\u0646\u062a \u0648\u06cc\u0646\u0633\u0646\u062a \u0648 \u06af\u0631\u0646\u0627\u062f\u06cc\u0646", "SH": "\u0633\u0646\u062a \u0647\u0644\u0646", "SG": "\u0633\u0646\u06af\u0627\u067e\u0648\u0631", "SN": "\u0633\u0646\u06af\u0627\u0644", "SJ": "\u0633\u0648\u0627\u0644\u0628\u0627\u0631\u062f \u0648 \u06cc\u0627\u0646 \u0645\u0627\u06cc\u0646", "SE": "\u0633\u0648\u0626\u062f", "CH": "\u0633\u0648\u0626\u06cc\u0633", "SD": "\u0633\u0648\u062f\u0627\u0646", "SS": "\u0633\u0648\u062f\u0627\u0646 \u062c\u0646\u0648\u0628\u06cc", "SR": "\u0633\u0648\u0631\u06cc\u0646\u0627\u0645", "SY": "\u0633\u0648\u0631\u06cc\u0647", "SO": "\u0633\u0648\u0645\u0627\u0644\u06cc", "SL": "\u0633\u06cc\u0631\u0627\u0644\u0626\u0648\u0646", "SC": "\u0633\u06cc\u0634\u0644", "CL": "\u0634\u06cc\u0644\u06cc", "EH": "\u0635\u062d\u0631\u0627\u06cc \u063a\u0631\u0628\u06cc", "RS": "\u0635\u0631\u0628\u0633\u062a\u0627\u0646", "IQ": "\u0639\u0631\u0627\u0642", "SA": "\u0639\u0631\u0628\u0633\u062a\u0627\u0646 \u0633\u0639\u0648\u062f\u06cc", "OM": "\u0639\u0645\u0627\u0646", "GH": "\u063a\u0646\u0627", "FR": "\u0641\u0631\u0627\u0646\u0633\u0647", "FI": "\u0641\u0646\u0644\u0627\u0646\u062f", "FJ": "\u0641\u06cc\u062c\u06cc", "PH": "\u0641\u06cc\u0644\u06cc\u067e\u06cc\u0646", "CY": "\u0642\u0628\u0631\u0633", "KG": "\u0642\u0631\u0642\u06cc\u0632\u0633\u062a\u0627\u0646", "KZ": "\u0642\u0632\u0627\u0642\u0633\u062a\u0627\u0646", "QA": "\u0642\u0637\u0631", "IO": "\u0642\u0644\u0645\u0631\u0648 \u0628\u0631\u06cc\u062a\u0627\u0646\u06cc\u0627 \u062f\u0631 \u0627\u0642\u06cc\u0627\u0646\u0648\u0633 \u0647\u0646\u062f", "CR": "\u06a9\u0627\u0633\u062a\u0627\u0631\u06cc\u06a9\u0627", "NC": "\u06a9\u0627\u0644\u062f\u0648\u0646\u06cc\u0627\u06cc \u062c\u062f\u06cc\u062f", "KH": "\u06a9\u0627\u0645\u0628\u0648\u062c", "CM": "\u06a9\u0627\u0645\u0631\u0648\u0646", "CA": "\u06a9\u0627\u0646\u0627\u062f\u0627", "HR": "\u06a9\u0631\u0648\u0627\u0633\u06cc", "KR": "\u06a9\u0631\u0647\u0654 \u062c\u0646\u0648\u0628\u06cc", "KP": "\u06a9\u0631\u0647\u0654 \u0634\u0645\u0627\u0644\u06cc", "CO": "\u06a9\u0644\u0645\u0628\u06cc\u0627", "CG": "\u06a9\u0646\u06af\u0648 - \u0628\u0631\u0627\u0632\u0648\u06cc\u0644", "CD": "\u06a9\u0646\u06af\u0648 - \u06a9\u06cc\u0646\u0634\u0627\u0633\u0627", "KE": "\u06a9\u0646\u06cc\u0627", "CU": "\u06a9\u0648\u0628\u0627", "CW": "\u06a9\u0648\u0631\u0627\u0633\u0627\u0626\u0648", "KM": "\u06a9\u0648\u0645\u0648\u0631", "KW": "\u06a9\u0648\u06cc\u062a", "CV": "\u06a9\u06cc\u067e\u200c\u0648\u0631\u062f", "KI": "\u06a9\u06cc\u0631\u06cc\u0628\u0627\u062a\u06cc", "GA": "\u06af\u0627\u0628\u0646", "GM": "\u06af\u0627\u0645\u0628\u06cc\u0627", "GE": "\u06af\u0631\u062c\u0633\u062a\u0627\u0646", "GD": "\u06af\u0631\u0646\u0627\u062f\u0627", "GG": "\u06af\u0631\u0646\u0632\u06cc", "GL": "\u06af\u0631\u06cc\u0646\u0644\u0646\u062f", "GT": "\u06af\u0648\u0627\u062a\u0645\u0627\u0644\u0627", "GP": "\u06af\u0648\u0627\u062f\u0644\u0648\u067e", "GU": "\u06af\u0648\u0627\u0645", "GY": "\u06af\u0648\u06cc\u0627\u0646", "GF": "\u06af\u0648\u06cc\u0627\u0646 \u0641\u0631\u0627\u0646\u0633\u0647", "GN": "\u06af\u06cc\u0646\u0647", "GQ": "\u06af\u06cc\u0646\u0647\u0654 \u0627\u0633\u062a\u0648\u0627\u06cc\u06cc", "GW": "\u06af\u06cc\u0646\u0647\u0654 \u0628\u06cc\u0633\u0627\u0626\u0648", "LA": "\u0644\u0627\u0626\u0648\u0633", "LB": "\u0644\u0628\u0646\u0627\u0646", "LV": "\u0644\u062a\u0648\u0646\u06cc", "LS": "\u0644\u0633\u0648\u062a\u0648", "LU": "\u0644\u0648\u06a9\u0632\u0627\u0645\u0628\u0648\u0631\u06af", "PL": "\u0644\u0647\u0633\u062a\u0627\u0646", "LR": "\u0644\u06cc\u0628\u0631\u06cc\u0627", "LY": "\u0644\u06cc\u0628\u06cc", "LT": "\u0644\u06cc\u062a\u0648\u0627\u0646\u06cc", "LI": "\u0644\u06cc\u062e\u062a\u0646\u200c\u0627\u0634\u062a\u0627\u06cc\u0646", "MG": "\u0645\u0627\u062f\u0627\u06af\u0627\u0633\u06a9\u0627\u0631", "MQ": "\u0645\u0627\u0631\u062a\u06cc\u0646\u06cc\u06a9", "MO": "\u0645\u0627\u06a9\u0627\u0626\u0648\u060c \u0645\u0646\u0637\u0642\u0647\u0654 \u0648\u06cc\u0698\u0647\u0654 \u0627\u062f\u0627\u0631\u06cc \u0686\u06cc\u0646", "MW": "\u0645\u0627\u0644\u0627\u0648\u06cc", "MT": "\u0645\u0627\u0644\u062a", "MV": "\u0645\u0627\u0644\u062f\u06cc\u0648", "MY": "\u0645\u0627\u0644\u0632\u06cc", "ML": "\u0645\u0627\u0644\u06cc", "YT": "\u0645\u0627\u06cc\u0648\u062a", "HU": "\u0645\u062c\u0627\u0631\u0633\u062a\u0627\u0646", "MA": "\u0645\u0631\u0627\u06a9\u0634", "EG": "\u0645\u0635\u0631", "MN": "\u0645\u063a\u0648\u0644\u0633\u062a\u0627\u0646", "MK": "\u0645\u0642\u062f\u0648\u0646\u06cc\u0647\u0654 \u0634\u0645\u0627\u0644\u06cc", "MX": "\u0645\u06a9\u0632\u06cc\u06a9", "MR": "\u0645\u0648\u0631\u06cc\u062a\u0627\u0646\u06cc", "MU": "\u0645\u0648\u0631\u06cc\u0633", "MZ": "\u0645\u0648\u0632\u0627\u0645\u0628\u06cc\u06a9", "MD": "\u0645\u0648\u0644\u062f\u0627\u0648\u06cc", "MC": "\u0645\u0648\u0646\u0627\u06a9\u0648", "MS": "\u0645\u0648\u0646\u062a\u200c\u0633\u0631\u0627\u062a", "ME": "\u0645\u0648\u0646\u062a\u0647\u200c\u0646\u06af\u0631\u0648", "MM": "\u0645\u06cc\u0627\u0646\u0645\u0627\u0631 (\u0628\u0631\u0645\u0647)", "NR": "\u0646\u0627\u0626\u0648\u0631\u0648", "NA": "\u0646\u0627\u0645\u06cc\u0628\u06cc\u0627", "NP": "\u0646\u067e\u0627\u0644", "NO": "\u0646\u0631\u0648\u0698", "NE": "\u0646\u06cc\u062c\u0631", "NG": "\u0646\u06cc\u062c\u0631\u06cc\u0647", "NI": "\u0646\u06cc\u06a9\u0627\u0631\u0627\u06af\u0648\u0626\u0647", "NU": "\u0646\u06cc\u0648\u0626\u0647", "NZ": "\u0646\u06cc\u0648\u0632\u06cc\u0644\u0646\u062f", "VA": "\u0648\u0627\u062a\u06cc\u06a9\u0627\u0646", "WF": "\u0648\u0627\u0644\u06cc\u0633 \u0648 \u0641\u0648\u062a\u0648\u0646\u0627", "VU": "\u0648\u0627\u0646\u0648\u0627\u062a\u0648", "VE": "\u0648\u0646\u0632\u0648\u0626\u0644\u0627", "VN": "\u0648\u06cc\u062a\u0646\u0627\u0645", "HT": "\u0647\u0627\u0626\u06cc\u062a\u06cc", "HM": "\u0647\u0631\u062f \u0648 \u062c\u0632\u0627\u06cc\u0631 \u0645\u06a9\u200c\u062f\u0648\u0646\u0627\u0644\u062f", "NL": "\u0647\u0644\u0646\u062f", "IN": "\u0647\u0646\u062f", "HN": "\u0647\u0646\u062f\u0648\u0631\u0627\u0633", "HK": "\u0647\u0646\u06af\u200c\u06a9\u0646\u06af\u060c \u0645\u0646\u0637\u0642\u0647\u0654 \u0648\u06cc\u0698\u0647\u0654 \u0627\u062f\u0627\u0631\u06cc \u0686\u06cc\u0646", "YE": "\u06cc\u0645\u0646", "GR": "\u06cc\u0648\u0646\u0627\u0646"}onionshare-2.6.3/desktop/onionshare/resources/countries/fi.json000066400000000000000000000115221475545702100250360ustar00rootroot00000000000000{"AF": "Afganistan", "AX": "Ahvenanmaa", "NL": "Alankomaat", "AL": "Albania", "DZ": "Algeria", "AS": "Amerikan Samoa", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktis", "AG": "Antigua ja Barbuda", "AE": "Arabiemiirikunnat", "AR": "Argentiina", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AZ": "Azerbaid\u017ean", "BS": "Bahama", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BE": "Belgia", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnia ja Hertsegovina", "BW": "Botswana", "BV": "Bouvet\u2019nsaari", "BR": "Brasilia", "IO": "Brittil\u00e4inen Intian valtameren alue", "VG": "Brittil\u00e4iset Neitsytsaaret", "BN": "Brunei", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "KY": "Caymansaaret", "CL": "Chile", "CK": "Cookinsaaret", "CR": "Costa Rica", "CW": "Cura\u00e7ao", "DJ": "Djibouti", "DM": "Dominica", "DO": "Dominikaaninen tasavalta", "EC": "Ecuador", "EG": "Egypti", "SV": "El Salvador", "ER": "Eritrea", "ES": "Espanja", "ZA": "Etel\u00e4-Afrikka", "GS": "Etel\u00e4-Georgia ja Etel\u00e4iset Sandwichsaaret", "KR": "Etel\u00e4-Korea", "SS": "Etel\u00e4-Sudan", "ET": "Etiopia", "FK": "Falklandinsaaret", "FJ": "Fid\u017ei", "PH": "Filippiinit", "FO": "F\u00e4rsaaret", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "GH": "Ghana", "GI": "Gibraltar", "GD": "Grenada", "GL": "Gr\u00f6nlanti", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard ja McDonaldinsaaret", "HN": "Honduras", "HK": "Hongkong \u2013 Kiinan e.h.a.", "SJ": "Huippuvuoret ja Jan Mayen", "ID": "Indonesia", "IN": "Intia", "IQ": "Irak", "IR": "Iran", "IE": "Irlanti", "IS": "Islanti", "GB": "Iso-Britannia", "IL": "Israel", "IT": "Italia", "TL": "It\u00e4-Timor", "AT": "It\u00e4valta", "JM": "Jamaika", "JP": "Japani", "YE": "Jemen", "JO": "Jordania", "CX": "Joulusaari", "KH": "Kambod\u017ea", "CM": "Kamerun", "CA": "Kanada", "CV": "Kap Verde", "BQ": "Karibian Alankomaat", "KZ": "Kazakstan", "KE": "Kenia", "CF": "Keski-Afrikan tasavalta", "CN": "Kiina", "KG": "Kirgisia", "KI": "Kiribati", "CO": "Kolumbia", "KM": "Komorit", "CD": "Kongon demokraattinen tasavalta", "CG": "Kongon tasavalta", "CC": "Kookossaaret (Keelingsaaret)", "GR": "Kreikka", "HR": "Kroatia", "CU": "Kuuba", "KW": "Kuwait", "CY": "Kypros", "LA": "Laos", "LV": "Latvia", "LS": "Lesotho", "LB": "Libanon", "LR": "Liberia", "LY": "Libya", "LI": "Liechtenstein", "LT": "Liettua", "LU": "Luxemburg", "EH": "L\u00e4nsi-Sahara", "MO": "Macao \u2013 Kiinan e.h.a.", "MG": "Madagaskar", "MW": "Malawi", "MV": "Malediivit", "MY": "Malesia", "ML": "Mali", "MT": "Malta", "IM": "Mansaari", "MA": "Marokko", "MQ": "Martinique", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Meksiko", "MD": "Moldova", "MC": "Monaco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mosambik", "MM": "Myanmar (Burma)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "NF": "Norfolkinsaari", "NO": "Norja", "CI": "Norsunluurannikko", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua-Uusi-Guinea", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairn", "KP": "Pohjois-Korea", "MK": "Pohjois-Makedonia", "PT": "Portugali", "PR": "Puerto Rico", "PL": "Puola", "GQ": "P\u00e4iv\u00e4ntasaajan Guinea", "QA": "Qatar", "FR": "Ranska", "TF": "Ranskan etel\u00e4iset alueet", "GF": "Ranskan Guayana", "PF": "Ranskan Polynesia", "RE": "R\u00e9union", "RO": "Romania", "RW": "Ruanda", "SE": "Ruotsi", "SH": "Saint Helena", "KN": "Saint Kitts ja Nevis", "LC": "Saint Lucia", "VC": "Saint Vincent ja Grenadiinit", "BL": "Saint-Barth\u00e9lemy", "MF": "Saint-Martin", "PM": "Saint-Pierre ja Miquelon", "DE": "Saksa", "SB": "Salomonsaaret", "ZM": "Sambia", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 ja Pr\u00edncipe", "SA": "Saudi-Arabia", "SN": "Senegal", "RS": "Serbia", "SC": "Seychellit", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakia", "SI": "Slovenia", "SO": "Somalia", "LK": "Sri Lanka", "SD": "Sudan", "FI": "Suomi", "SR": "Suriname", "CH": "Sveitsi", "SZ": "Swazimaa", "SY": "Syyria", "TJ": "Tad\u017eikistan", "TW": "Taiwan", "TZ": "Tansania", "DK": "Tanska", "TH": "Thaimaa", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad ja Tobago", "TD": "T\u0161ad", "CZ": "T\u0161ekki", "TN": "Tunisia", "TR": "Turkki", "TM": "Turkmenistan", "TC": "Turks- ja Caicossaaret", "UG": "Uganda", "UA": "Ukraina", "HU": "Unkari", "UY": "Uruguay", "NC": "Uusi-Kaledonia", "NZ": "Uusi-Seelanti", "UZ": "Uzbekistan", "BY": "Valko-Ven\u00e4j\u00e4", "VU": "Vanuatu", "VA": "Vatikaani", "VE": "Venezuela", "RU": "Ven\u00e4j\u00e4", "VN": "Vietnam", "EE": "Viro", "WF": "Wallis ja Futuna", "US": "Yhdysvallat", "VI": "Yhdysvaltain Neitsytsaaret", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/fr.json000066400000000000000000000123561475545702100250550ustar00rootroot00000000000000{"AF": "Afghanistan", "ZA": "Afrique du Sud", "AL": "Albanie", "DZ": "Alg\u00e9rie", "DE": "Allemagne", "AD": "Andorre", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarctique", "AG": "Antigua-et-Barbuda", "SA": "Arabie saoudite", "AR": "Argentine", "AM": "Arm\u00e9nie", "AW": "Aruba", "AU": "Australie", "AT": "Autriche", "AZ": "Azerba\u00efdjan", "BS": "Bahamas", "BH": "Bahre\u00efn", "BD": "Bangladesh", "BB": "Barbade", "BE": "Belgique", "BZ": "Belize", "BJ": "B\u00e9nin", "BM": "Bermudes", "BT": "Bhoutan", "BY": "Bi\u00e9lorussie", "BO": "Bolivie", "BA": "Bosnie-Herz\u00e9govine", "BW": "Botswana", "BR": "Br\u00e9sil", "BN": "Brun\u00e9i Darussalam", "BG": "Bulgarie", "BF": "Burkina Faso", "BI": "Burundi", "KH": "Cambodge", "CM": "Cameroun", "CA": "Canada", "CV": "Cap-Vert", "CL": "Chili", "CN": "Chine", "CY": "Chypre", "CO": "Colombie", "KM": "Comores", "CG": "Congo-Brazzaville", "CD": "Congo-Kinshasa", "KP": "Cor\u00e9e du Nord", "KR": "Cor\u00e9e du Sud", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire", "HR": "Croatie", "CU": "Cuba", "CW": "Cura\u00e7ao", "DK": "Danemark", "DJ": "Djibouti", "DM": "Dominique", "EG": "\u00c9gypte", "AE": "\u00c9mirats arabes unis", "EC": "\u00c9quateur", "ER": "\u00c9rythr\u00e9e", "ES": "Espagne", "EE": "Estonie", "SZ": "Eswatini", "VA": "\u00c9tat de la Cit\u00e9 du Vatican", "US": "\u00c9tats-Unis", "ET": "\u00c9thiopie", "FJ": "Fidji", "FI": "Finlande", "FR": "France", "GA": "Gabon", "GM": "Gambie", "GE": "G\u00e9orgie", "GS": "G\u00e9orgie du Sud et \u00eeles Sandwich du Sud", "GH": "Ghana", "GI": "Gibraltar", "GR": "Gr\u00e8ce", "GD": "Grenade", "GL": "Groenland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernesey", "GN": "Guin\u00e9e", "GQ": "Guin\u00e9e \u00e9quatoriale", "GW": "Guin\u00e9e-Bissau", "GY": "Guyana", "GF": "Guyane fran\u00e7aise", "HT": "Ha\u00efti", "HN": "Honduras", "HU": "Hongrie", "BV": "\u00cele Bouvet", "CX": "\u00cele Christmas", "IM": "\u00cele de Man", "NF": "\u00cele Norfolk", "AX": "\u00celes \u00c5land", "KY": "\u00celes Ca\u00efmans", "CC": "\u00celes Cocos", "CK": "\u00celes Cook", "FO": "\u00celes F\u00e9ro\u00e9", "HM": "\u00celes Heard et McDonald", "FK": "\u00celes Malouines", "PN": "\u00celes Pitcairn", "SB": "\u00celes Salomon", "TC": "\u00celes Turques-et-Ca\u00efques", "VG": "\u00celes Vierges britanniques", "VI": "\u00celes Vierges des \u00c9tats-Unis", "IN": "Inde", "ID": "Indon\u00e9sie", "IQ": "Irak", "IR": "Iran", "IE": "Irlande", "IS": "Islande", "IL": "Isra\u00ebl", "IT": "Italie", "JM": "Jama\u00efque", "JP": "Japon", "JO": "Jordanie", "KZ": "Kazakhstan", "KE": "Kenya", "KG": "Kirghizistan", "KI": "Kiribati", "KW": "Kowe\u00eft", "RE": "La R\u00e9union", "LA": "Laos", "LS": "Lesotho", "LV": "Lettonie", "LB": "Liban", "LR": "Lib\u00e9ria", "LY": "Libye", "LI": "Liechtenstein", "LT": "Lituanie", "LU": "Luxembourg", "MK": "Mac\u00e9doine du Nord", "MG": "Madagascar", "MY": "Malaisie", "MW": "Malawi", "MV": "Maldives", "ML": "Mali", "MT": "Malte", "MA": "Maroc", "MQ": "Martinique", "MU": "Maurice", "MR": "Mauritanie", "YT": "Mayotte", "MX": "Mexique", "MD": "Moldavie", "MC": "Monaco", "MN": "Mongolie", "ME": "Mont\u00e9n\u00e9gro", "MS": "Montserrat", "MZ": "Mozambique", "MM": "Myanmar (Birmanie)", "NA": "Namibie", "NR": "Nauru", "NP": "N\u00e9pal", "NI": "Nicaragua", "NE": "Niger", "NG": "Nig\u00e9ria", "NU": "Niue", "NO": "Norv\u00e8ge", "NC": "Nouvelle-Cal\u00e9donie", "NZ": "Nouvelle-Z\u00e9lande", "OM": "Oman", "UG": "Ouganda", "UZ": "Ouzb\u00e9kistan", "PK": "Pakistan", "PW": "Palaos", "PA": "Panama", "PG": "Papouasie-Nouvelle-Guin\u00e9e", "PY": "Paraguay", "NL": "Pays-Bas", "BQ": "Pays-Bas carib\u00e9ens", "PE": "P\u00e9rou", "PH": "Philippines", "PL": "Pologne", "PF": "Polyn\u00e9sie fran\u00e7aise", "PR": "Porto Rico", "PT": "Portugal", "QA": "Qatar", "HK": "R.A.S. chinoise de Hong Kong", "MO": "R.A.S. chinoise de Macao", "CF": "R\u00e9publique centrafricaine", "DO": "R\u00e9publique dominicaine", "RO": "Roumanie", "GB": "Royaume-Uni", "RU": "Russie", "RW": "Rwanda", "EH": "Sahara occidental", "BL": "Saint-Barth\u00e9lemy", "KN": "Saint-Christophe-et-Ni\u00e9v\u00e8s", "SM": "Saint-Marin", "MF": "Saint-Martin", "SX": "Saint-Martin (partie n\u00e9erlandaise)", "PM": "Saint-Pierre-et-Miquelon", "VC": "Saint-Vincent-et-les-Grenadines", "SH": "Sainte-H\u00e9l\u00e8ne", "LC": "Sainte-Lucie", "SV": "Salvador", "WS": "Samoa", "AS": "Samoa am\u00e9ricaines", "ST": "Sao Tom\u00e9-et-Principe", "SN": "S\u00e9n\u00e9gal", "RS": "Serbie", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapour", "SK": "Slovaquie", "SI": "Slov\u00e9nie", "SO": "Somalie", "SD": "Soudan", "SS": "Soudan du Sud", "LK": "Sri Lanka", "SE": "Su\u00e8de", "CH": "Suisse", "SR": "Suriname", "SJ": "Svalbard et Jan Mayen", "SY": "Syrie", "TJ": "Tadjikistan", "TW": "Ta\u00efwan", "TZ": "Tanzanie", "TD": "Tchad", "CZ": "Tch\u00e9quie", "TF": "Terres australes fran\u00e7aises", "IO": "Territoire britannique de l\u2019oc\u00e9an Indien", "TH": "Tha\u00eflande", "TL": "Timor oriental", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinit\u00e9-et-Tobago", "TN": "Tunisie", "TM": "Turkm\u00e9nistan", "TR": "Turquie", "UA": "Ukraine", "UY": "Uruguay", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis-et-Futuna", "YE": "Y\u00e9men", "ZM": "Zambie", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/ga.json000066400000000000000000000146271475545702100250400ustar00rootroot00000000000000{"ET": "an Aet\u00f3ip", "AF": "an Afganast\u00e1in", "ZA": "an Afraic Theas", "DZ": "an Ailg\u00e9ir", "AR": "an Airgint\u00edn", "AM": "an Airm\u00e9in", "AL": "an Alb\u00e1in", "AQ": "an Antartaice", "SA": "an Araib Sh\u00e1dach", "AZ": "an Asarbaise\u00e1in", "AU": "an Astr\u00e1il", "BD": "an Bhanglaid\u00e9is", "BY": "an Bhealar\u00fais", "BE": "an Bheilg", "BZ": "an Bheil\u00eds", "BA": "an Bhoisnia agus an Heirseagaiv\u00e9in", "BO": "an Bholaiv", "BW": "an Bhotsu\u00e1in", "BR": "an Bhrasa\u00edl", "BG": "an Bhulg\u00e1ir", "BI": "an Bhur\u00fain", "BT": "an Bh\u00fat\u00e1in", "KH": "an Chamb\u00f3id", "KZ": "an Chasacst\u00e1in", "KE": "an Ch\u00e9inia", "CY": "an Chipir", "KG": "an Chirgeast\u00e1in", "KR": "an Ch\u00f3ir\u00e9 Theas", "KP": "an Ch\u00f3ir\u00e9 Thuaidh", "CO": "an Chol\u00f3im", "HR": "an Chr\u00f3it", "CG": "an Cong\u00f3", "CI": "an C\u00f3sta Eabhair", "DK": "an Danmhairg", "EE": "an East\u00f3in", "EG": "an \u00c9igipt", "CH": "an Eilv\u00e9is", "ER": "an Eiritr\u00e9", "FI": "an Fhionlainn", "FR": "an Fhrainc", "GA": "an Ghab\u00fain", "GM": "an Ghaimbia", "DE": "an Ghearm\u00e1in", "GL": "an Ghraonlainn", "GR": "an Ghr\u00e9ig", "GY": "an Ghu\u00e1in", "GN": "an Ghuine", "GQ": "an Ghuine Mhe\u00e1nchiorclach", "IQ": "an Iar\u00e1ic", "IR": "an Iar\u00e1in", "IN": "an India", "ID": "an Indin\u00e9is", "IT": "an Iod\u00e1il", "JO": "an Iord\u00e1in", "NO": "an Iorua", "IS": "an \u00cdoslainn", "NL": "an \u00cdsilt\u00edr", "BQ": "an \u00cdsilt\u00edr Chairibeach", "LV": "an Laitvia", "LR": "an Lib\u00e9ir", "LY": "an Libia", "LB": "an Liob\u00e1in", "LT": "an Liotu\u00e1in", "MK": "an Mhacad\u00f3in Thuaidh", "MY": "an Mhalaeisia", "MW": "an Mhal\u00e1iv", "MR": "an Mh\u00e1rat\u00e1in", "MD": "an Mhold\u00f3iv", "MN": "an Mhong\u00f3il", "NA": "an Namaib", "NG": "an Nig\u00e9ir", "NE": "an N\u00edgir", "NC": "an Nua-Chalad\u00f3in", "NZ": "an Nua-Sh\u00e9alainn", "AT": "an Ostair", "PK": "an Phacast\u00e1in", "DO": "an Phoblacht Dhoiminiceach", "PL": "an Pholainn", "PT": "an Phortaing\u00e9il", "GB": "an R\u00edocht Aontaithe", "RO": "an R\u00f3m\u00e1in", "RU": "an R\u00fais", "EH": "an Sah\u00e1ra Thiar", "ES": "an Sp\u00e1inn", "TJ": "an T\u00e1ids\u00edceast\u00e1in", "TZ": "an Tans\u00e1in", "TH": "an T\u00e9alainn", "TW": "an T\u00e9av\u00e1in", "ZM": "an tSaimbia", "SV": "an tSalvad\u00f3ir", "JP": "an tSeap\u00e1in", "CZ": "an tSeicia", "SN": "an tSeineag\u00e1il", "RS": "an tSeirbia", "GE": "an tSeoirsia", "GS": "an tSeoirsia Theas agus Oile\u00e1in Sandwich Theas", "CL": "an tSile", "CN": "an tS\u00edn", "ZW": "an tSiomb\u00e1ib", "SY": "an tSiria", "SI": "an tSl\u00f3iv\u00e9in", "SK": "an tSl\u00f3vaic", "SO": "an tSom\u00e1il", "SE": "an tSualainn", "SD": "an tS\u00fad\u00e1in", "SS": "an tS\u00fad\u00e1in Theas", "TN": "an T\u00fain\u00e9is", "TR": "an Tuirc", "TM": "an Tuircm\u00e9anast\u00e1in", "UA": "an \u00dacr\u00e1in", "UZ": "an \u00daisb\u00e9iceast\u00e1in", "HU": "an Ung\u00e1ir", "AD": "And\u00f3ra", "AI": "Anga\u00edle", "AO": "Ang\u00f3la", "AG": "Antigua agus Barb\u00fada", "AE": "Aontas na n\u00c9im\u00edr\u00edochta\u00ed Arabacha", "AW": "Ar\u00faba", "BH": "Bair\u00e9in", "BB": "Barbad\u00f3s", "BJ": "Beinin", "BM": "Beirmi\u00fada", "BN": "Br\u00fain\u00e9", "BF": "Buirc\u00edne Fas\u00f3", "CM": "Camar\u00fan", "QA": "Catar", "VA": "Cathair na Vatac\u00e1ine", "CA": "Ceanada", "KI": "Cireabait\u00ed", "CR": "C\u00f3sta R\u00edce", "IO": "Cr\u00edoch Aig\u00e9an Indiach na Breataine", "TF": "Cr\u00edocha Francacha Dheisceart an Domhain", "KW": "Cu\u00e1it", "CU": "C\u00faba", "CW": "Cura\u00e7ao", "DJ": "Djibouti", "DM": "Doiminice", "EC": "Eacuad\u00f3r", "YE": "\u00c9imin", "IE": "\u00c9ire", "SZ": "eSuait\u00edn\u00ed", "FJ": "Fids\u00ed", "GH": "G\u00e1na", "GG": "Geansa\u00ed", "GI": "Giobr\u00e1ltar", "GD": "Grean\u00e1da", "GP": "Guadal\u00faip", "GF": "Gu\u00e1in na Fraince", "GU": "Guam", "GT": "Guatamala", "GW": "Guine Bissau", "HT": "H\u00e1\u00edt\u00ed", "HN": "Hond\u00faras", "JM": "Iam\u00e1ice", "IL": "Iosrael", "LA": "Laos", "LS": "Leos\u00f3ta", "LI": "Lichtinst\u00e9in", "LU": "Lucsamburg", "MG": "Madagascar", "MM": "Maenmar (Burma)", "ML": "Mail\u00ed", "MT": "M\u00e1lta", "MA": "Marac\u00f3", "MQ": "Martinique", "YT": "Mayotte", "MX": "Meicsiceo", "MC": "Monac\u00f3", "ME": "Montain\u00e9agr\u00f3", "MS": "Montsarat", "MZ": "M\u00f3saimb\u00edc", "BS": "na Bah\u00e1ma\u00ed", "PH": "na hOile\u00e1in Fhilip\u00edneacha", "SC": "na S\u00e9is\u00e9il", "NR": "N\u00e1r\u00fa", "NP": "Neipeal", "NI": "Nicearagua", "NU": "Niue", "PG": "Nua-Ghuine Phapua", "AX": "Oile\u00e1in \u00c5land", "VG": "Oile\u00e1in Bhriotanacha na Maighdean", "KY": "Oile\u00e1in Cayman", "KM": "Oile\u00e1in Chom\u00f3ra", "CC": "Oile\u00e1in Cocos (Keeling)", "CK": "Oile\u00e1in Cook", "FK": "Oile\u00e1in Fh\u00e1clainne", "FO": "Oile\u00e1in Fhar\u00f3", "MV": "Oile\u00e1in Mhaild\u00edve", "VI": "Oile\u00e1in Mheirice\u00e1nacha na Maighdean", "TC": "Oile\u00e1in na dTurcach agus Caicos", "PW": "Oile\u00e1in Palau", "PN": "Oile\u00e1in Pitcairn", "SB": "Oile\u00e1in Sholom\u00f3n", "BV": "Oile\u00e1n Bouvet", "HM": "Oile\u00e1n Heard agus Oile\u00e1in McDonald", "IM": "Oile\u00e1n Mhanann", "MU": "Oile\u00e1n Mhuir\u00eds", "CX": "Oile\u00e1n na Nollag", "TT": "Oile\u00e1n na Tr\u00edon\u00f3ide agus Tob\u00e1ga", "NF": "Oile\u00e1n Norfolk", "OM": "\u00d3man", "PA": "Panama", "PY": "Paragua", "PE": "Peiri\u00fa", "CD": "Poblacht Dhaonlathach an Chong\u00f3", "CF": "Poblacht na hAfraice L\u00e1ir", "PF": "Polain\u00e9is na Fraince", "PR": "P\u00f3rt\u00f3 R\u00edce", "RE": "R\u00e9union", "CV": "Rinn Verde", "RW": "Ruanda", "HK": "S.R.R. na S\u00edne Hong Cong", "MO": "S.R.R. na S\u00edne Macao", "BL": "Saint Barth\u00e9lemy", "LC": "Saint Lucia", "MF": "Saint-Martin", "WS": "Sam\u00f3", "AS": "Sam\u00f3 Mheirice\u00e1", "KN": "San Cr\u00edost\u00f3ir-Nimheas", "SH": "San H\u00e9ilin", "SM": "San Mair\u00edne", "PM": "San Pierre agus Miquelon", "VC": "San Uinseann agus na Grean\u00e1id\u00edn\u00ed", "ST": "S\u00e3o Tom\u00e9 agus Pr\u00edncipe", "TD": "Sead", "SL": "Siarra Leon", "SG": "Singeap\u00f3r", "SX": "Sint Maarten", "LK": "Sr\u00ed Lanca", "US": "St\u00e1it Aontaithe Mheirice\u00e1", "SR": "Suranam", "SJ": "Svalbard agus Jan Mayen", "TL": "T\u00edom\u00f3r Thoir", "TK": "T\u00f3cal\u00e1", "TG": "T\u00f3ga", "TO": "Tonga", "UG": "Uganda", "UY": "Uragua", "WF": "Vail\u00eds agus Fut\u00fana", "VU": "Vanuat\u00fa", "VE": "Veinis\u00e9ala", "VN": "V\u00edtneam"}onionshare-2.6.3/desktop/onionshare/resources/countries/gl.json000066400000000000000000000120611475545702100250410ustar00rootroot00000000000000{"AQ": "A Ant\u00e1rtida", "AR": "A Arxentina", "CN": "A China", "GW": "A Guinea Bissau", "IN": "A India", "PF": "A Polinesia Francesa", "AZ": "Acerbaix\u00e1n", "AF": "Afganist\u00e1n", "AL": "Albania", "DE": "Alema\u00f1a", "DZ": "Alxeria", "AD": "Andorra", "AO": "Angola", "AI": "Anguila", "AG": "Antigua e Barbuda", "SA": "Arabia Saudita", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BY": "Belar\u00fas", "BZ": "Belize", "BE": "B\u00e9lxica", "BJ": "Ben\u00edn", "BO": "Bolivia", "BA": "Bosnia e Hercegovina", "BW": "Botswana", "BN": "Brunei", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "BT": "But\u00e1n", "CV": "Cabo Verde", "KH": "Camboxa", "CM": "Camer\u00fan", "BQ": "Caribe Neerland\u00e9s", "TD": "Chad", "CZ": "Chequia", "CL": "Chile", "CY": "Chipre", "VA": "Cidade do Vaticano", "CO": "Colombia", "KM": "Comores", "KP": "Corea do Norte", "KR": "Corea do Sur", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire", "HR": "Croacia", "CU": "Cuba", "CW": "Cura\u00e7ao", "DK": "Dinamarca", "DJ": "Djibuti", "DM": "Dominica", "EC": "Ecuador", "ER": "Eritrea", "SK": "Eslovaquia", "SI": "Eslovenia", "ES": "Espa\u00f1a", "EE": "Estonia", "SZ": "Eswatini", "ET": "Etiop\u00eda", "EG": "Exipto", "PH": "Filipinas", "FI": "Finlandia", "FJ": "Fixi", "FR": "Francia", "GA": "Gab\u00f3n", "GM": "Gambia", "GH": "Ghana", "GD": "Granada", "GR": "Grecia", "GL": "Groenlandia", "GP": "Guadalupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GY": "G\u00fciana", "GF": "G\u00fciana Francesa", "GN": "Guinea", "GQ": "Guinea Ecuatorial", "HT": "Hait\u00ed", "HN": "Honduras", "HK": "Hong Kong RAE da China", "HU": "Hungr\u00eda", "BV": "Illa Bouvet", "CX": "Illa Christmas", "IM": "Illa de Man", "HM": "Illa Heard e Illas McDonald", "NF": "Illa Norfolk", "AX": "Illas \u00c5land", "BM": "Illas Bermudas", "KY": "Illas Caim\u00e1n", "CC": "Illas Cocos (Keeling)", "CK": "Illas Cook", "FO": "Illas Feroe", "FK": "Illas Malvinas", "PN": "Illas Pitcairn", "SB": "Illas Salom\u00f3n", "TC": "Illas Turks e Caicos", "VG": "Illas Virxes Brit\u00e1nicas", "VI": "Illas Virxes Estadounidenses", "GS": "Illas Xeorxia do Sur e Sandwich do Sur", "ID": "Indonesia", "IR": "Ir\u00e1n", "IQ": "Iraq", "IE": "Irlanda", "IS": "Islandia", "IL": "Israel", "IT": "Italia", "KZ": "Kazakist\u00e1n", "KE": "Kenya", "KG": "Kirguizist\u00e1n", "KI": "Kiribati", "KW": "Kuwait", "LA": "Laos", "LS": "Lesotho", "LV": "Letonia", "LR": "Liberia", "LY": "Libia", "LI": "Liechtenstein", "LT": "Lituania", "LU": "Luxemburgo", "MO": "Macau RAE da China", "MK": "Macedonia do Norte", "MG": "Madagascar", "MY": "Malaisia", "MW": "Malawi", "MV": "Maldivas", "ML": "Mal\u00ed", "MT": "Malta", "MA": "Marrocos", "MQ": "Martinica", "MU": "Mauricio", "MR": "Mauritania", "YT": "Mayotte", "MX": "M\u00e9xico", "MD": "Moldavia", "MC": "M\u00f3naco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mozambique", "MM": "Myanmar (Birmania)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicaragua", "NU": "Niue", "NE": "N\u00edxer", "NG": "Nixeria", "NO": "Noruega", "NC": "Nova Caledonia", "NZ": "Nova Zelandia", "BR": "O Brasil", "CA": "O Canad\u00e1", "YE": "O Iemen", "LB": "O L\u00edbano", "PY": "O Paraguai", "PE": "O Per\u00fa", "GB": "O Reino Unido", "EH": "O S\u00e1hara Occidental", "SV": "O Salvador", "SD": "O Sud\u00e1n", "SS": "O Sud\u00e1n do Sur", "UY": "O Uruguai", "JP": "O Xap\u00f3n", "OM": "Om\u00e1n", "AE": "Os Emiratos \u00c1rabes Unidos", "US": "Os Estados Unidos", "NL": "Pa\u00edses Baixos", "PW": "Palau", "PA": "Panam\u00e1", "PG": "Pap\u00faa-Nova Guinea", "PK": "Paquist\u00e1n", "PL": "Polonia", "PR": "Porto Rico", "PT": "Portugal", "QA": "Qatar", "CF": "Rep\u00fablica Centroafricana", "CD": "Rep\u00fablica Democr\u00e1tica do Congo", "CG": "Rep\u00fablica do Congo", "DO": "Rep\u00fablica Dominicana", "RE": "Reuni\u00f3n", "RO": "Roman\u00eda", "RW": "Ruanda", "RU": "Rusia", "BL": "Saint Barth\u00e9lemy", "KN": "Saint Kitts e Nevis", "MF": "Saint Martin", "PM": "Saint Pierre et Miquelon", "WS": "Samoa", "AS": "Samoa Americana", "SM": "San Marino", "ST": "San Tom\u00e9 e Pr\u00edncipe", "VC": "San Vicente e As Granadinas", "SH": "Santa Helena", "LC": "Santa Luc\u00eda", "SN": "Senegal", "RS": "Serbia", "SL": "Serra Leoa", "SC": "Seychelles", "SG": "Singapur", "SX": "Sint Maarten", "SY": "Siria", "SO": "Somalia", "LK": "Sri Lanka", "SE": "Suecia", "CH": "Su\u00edza", "ZA": "Sur\u00e1frica", "SR": "Suriname", "SJ": "Svalbard e Jan Mayen", "TH": "Tailandia", "TW": "Taiw\u00e1n", "TZ": "Tanzania", "TJ": "Taxiquist\u00e1n", "IO": "Territorio Brit\u00e1nico do Oc\u00e9ano \u00cdndico", "TF": "Territorios Austrais Franceses", "TL": "Timor Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad e Tobago", "TN": "Tunisia", "TM": "Turkmenist\u00e1n", "TR": "Turqu\u00eda", "UA": "Ucra\u00edna", "UG": "Uganda", "UZ": "Uzbekist\u00e1n", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis e Futuna", "JM": "Xamaica", "GE": "Xeorxia", "GI": "Xibraltar", "JO": "Xordania", "ZM": "Zambia", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/hr.json000066400000000000000000000117211475545702100250520ustar00rootroot00000000000000{"AF": "Afganistan", "AX": "\u00c5landski otoci", "AL": "Albanija", "DZ": "Al\u017eir", "AS": "Ameri\u010dka Samoa", "VI": "Ameri\u010dki Djevi\u010danski otoci", "AD": "Andora", "AO": "Angola", "AI": "Angvila", "AQ": "Antarktika", "AG": "Antigva i Barbuda", "AR": "Argentina", "AM": "Armenija", "AW": "Aruba", "AU": "Australija", "AT": "Austrija", "AZ": "Azerbajd\u017ean", "BS": "Bahami", "BH": "Bahrein", "BD": "Banglade\u0161", "BB": "Barbados", "BE": "Belgija", "BZ": "Belize", "BJ": "Benin", "BM": "Bermudi", "BY": "Bjelorusija", "BW": "Bocvana", "BO": "Bolivija", "BA": "Bosna i Hercegovina", "CX": "Bo\u017ei\u0107ni otok", "BR": "Brazil", "VG": "Britanski Djevi\u010danski otoci", "IO": "Britanski Indijskooceanski teritorij", "BN": "Brunej", "BG": "Bugarska", "BF": "Burkina Faso", "BI": "Burundi", "BT": "Butan", "CY": "Cipar", "CK": "Cookovi Otoci", "ME": "Crna Gora", "CW": "Cura\u00e7ao", "TD": "\u010cad", "CZ": "\u010ce\u0161ka", "CL": "\u010cile", "DK": "Danska", "DM": "Dominika", "DO": "Dominikanska Republika", "DJ": "D\u017eibuti", "EG": "Egipat", "EC": "Ekvador", "GQ": "Ekvatorska Gvineja", "ER": "Eritreja", "EE": "Estonija", "SZ": "Esvatini", "ET": "Etiopija", "FK": "Falklandski otoci", "FO": "Farski otoci", "FJ": "Fid\u017ei", "PH": "Filipini", "FI": "Finska", "FR": "Francuska", "GF": "Francuska Gijana", "PF": "Francuska Polinezija", "TF": "Francuski ju\u017eni i antarkti\u010dki teritoriji", "GA": "Gabon", "GM": "Gambija", "GH": "Gana", "GI": "Gibraltar", "GR": "Gr\u010dka", "GD": "Grenada", "GL": "Grenland", "GE": "Gruzija", "GP": "Guadalupe", "GU": "Guam", "GG": "Guernsey", "GY": "Gvajana", "GT": "Gvatemala", "GN": "Gvineja", "GW": "Gvineja Bisau", "HT": "Haiti", "HN": "Honduras", "HR": "Hrvatska", "IN": "Indija", "ID": "Indonezija", "IQ": "Irak", "IR": "Iran", "IE": "Irska", "IS": "Island", "IT": "Italija", "IL": "Izrael", "JM": "Jamajka", "JP": "Japan", "YE": "Jemen", "JO": "Jordan", "GS": "Ju\u017ena Georgija i Ju\u017eni Sendvi\u010dki Otoci", "KR": "Ju\u017ena Koreja", "SS": "Ju\u017eni Sudan", "ZA": "Ju\u017enoafri\u010dka Republika", "KY": "Kajmanski otoci", "KH": "Kambod\u017ea", "CM": "Kamerun", "CA": "Kanada", "BQ": "Karipski otoci Nizozemske", "QA": "Katar", "KZ": "Kazahstan", "KE": "Kenija", "CN": "Kina", "KG": "Kirgistan", "KI": "Kiribati", "CC": "Kokosovi (Keelingovi) otoci", "CO": "Kolumbija", "KM": "Komori", "CG": "Kongo - Brazzaville", "CD": "Kongo - Kinshasa", "CR": "Kostarika", "CU": "Kuba", "KW": "Kuvajt", "LA": "Laos", "LV": "Latvija", "LS": "Lesoto", "LB": "Libanon", "LR": "Liberija", "LY": "Libija", "LI": "Lihten\u0161tajn", "LT": "Litva", "LU": "Luksemburg", "MG": "Madagaskar", "HU": "Ma\u0111arska", "MW": "Malavi", "MV": "Maldivi", "MY": "Malezija", "ML": "Mali", "MT": "Malta", "MA": "Maroko", "MQ": "Martinique", "MR": "Mauretanija", "MU": "Mauricijus", "YT": "Mayotte", "MX": "Meksiko", "MM": "Mjanmar (Burma)", "MD": "Moldavija", "MC": "Monako", "MN": "Mongolija", "MS": "Montserrat", "MZ": "Mozambik", "NA": "Namibija", "NR": "Nauru", "NP": "Nepal", "NE": "Niger", "NG": "Nigerija", "NI": "Nikaragva", "NU": "Niue", "NL": "Nizozemska", "NO": "Norve\u0161ka", "NC": "Nova Kaledonija", "NZ": "Novi Zeland", "DE": "Njema\u010dka", "CI": "Obala Bjelokosti", "OM": "Oman", "HM": "Otoci Heard i McDonald", "PN": "Otoci Pitcairn", "TC": "Otoci Turks i Caicos", "BV": "Otok Bouvet", "IM": "Otok Man", "NF": "Otok Norfolk", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua Nova Gvineja", "PY": "Paragvaj", "PE": "Peru", "PL": "Poljska", "PR": "Portoriko", "PT": "Portugal", "HK": "PUP Hong Kong Kina", "MO": "PUP Makao Kina", "RE": "R\u00e9union", "RW": "Ruanda", "RO": "Rumunjska", "RU": "Rusija", "BL": "Saint Barth\u00e9lemy", "MF": "Saint Martin", "PM": "Saint-Pierre-et-Miquelon", "SB": "Salomonski Otoci", "SV": "Salvador", "WS": "Samoa", "SM": "San Marino", "SA": "Saudijska Arabija", "SC": "Sej\u0161eli", "SN": "Senegal", "SL": "Sijera Leone", "SG": "Singapur", "SX": "Sint Maarten", "SY": "Sirija", "US": "Sjedinjene Ameri\u010dke Dr\u017eave", "KP": "Sjeverna Koreja", "MK": "Sjeverna Makedonija", "SK": "Slova\u010dka", "SI": "Slovenija", "SO": "Somalija", "RS": "Srbija", "CF": "Srednjoafri\u010dka Republika", "SD": "Sudan", "SR": "Surinam", "SJ": "Svalbard i Jan Mayen", "SH": "Sveta Helena", "LC": "Sveta Lucija", "KN": "Sveti Kristofor i Nevis", "ST": "Sveti Toma i Princip", "VC": "Sveti Vincent i Grenadini", "ES": "\u0160panjolska", "LK": "\u0160ri Lanka", "SE": "\u0160vedska", "CH": "\u0160vicarska", "TJ": "Tad\u017eikistan", "TH": "Tajland", "TW": "Tajvan", "TZ": "Tanzanija", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad i Tobago", "TN": "Tunis", "TM": "Turkmenistan", "TR": "Turska", "UG": "Uganda", "AE": "Ujedinjeni Arapski Emirati", "GB": "Ujedinjeno Kraljevstvo", "UA": "Ukrajina", "UY": "Urugvaj", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatikanski Grad", "VE": "Venezuela", "VN": "Vijetnam", "WF": "Wallis i Futuna", "ZM": "Zambija", "EH": "Zapadna Sahara", "CV": "Zelenortska Republika", "ZW": "Zimbabve"}onionshare-2.6.3/desktop/onionshare/resources/countries/is.json000066400000000000000000000141241475545702100250540ustar00rootroot00000000000000{"AF": "Afganistan", "AL": "Alban\u00eda", "DZ": "Als\u00edr", "AD": "Andorra", "AO": "Ang\u00f3la", "AI": "Angvilla", "AG": "Ant\u00edgva og Barb\u00fada", "AR": "Argent\u00edna", "AM": "Armen\u00eda", "AW": "Ar\u00faba", "AZ": "Aserba\u00eddsjan", "AT": "Austurr\u00edki", "AX": "\u00c1landseyjar", "AU": "\u00c1stral\u00eda", "BS": "Bahamaeyjar", "US": "Bandar\u00edkin", "AS": "Bandar\u00edska Sam\u00f3a", "VI": "Bandar\u00edsku J\u00f3mfr\u00faaeyjar", "BD": "Bangladess", "BB": "Barbados", "BH": "Barein", "BE": "Belg\u00eda", "BZ": "Bel\u00eds", "BJ": "Ben\u00edn", "BM": "Berm\u00fadaeyjar", "BA": "Bosn\u00eda og Herseg\u00f3v\u00edna", "BW": "Botsvana", "BV": "Bouveteyja", "BO": "B\u00f3liv\u00eda", "BR": "Brasil\u00eda", "IO": "Bresku Indlandshafseyjar", "VG": "Bresku J\u00f3mfr\u00faaeyjar", "GB": "Bretland", "BN": "Br\u00fanei", "BG": "B\u00falgar\u00eda", "BF": "B\u00fark\u00edna Fas\u00f3", "BI": "B\u00far\u00fand\u00ed", "BT": "B\u00fatan", "KY": "Caymaneyjar", "CK": "Cooks-eyjar", "CW": "Curacao", "DK": "Danm\u00f6rk", "DJ": "Dj\u00edb\u00fat\u00ed", "DM": "D\u00f3min\u00edka", "DO": "D\u00f3min\u00edska l\u00fd\u00f0veldi\u00f0", "EG": "Egyptaland", "EE": "Eistland", "EC": "Ekvador", "SV": "El Salvador", "ER": "Er\u00edtrea", "ET": "E\u00fe\u00ed\u00f3p\u00eda", "FK": "Falklandseyjar", "PH": "Filippseyjar", "FI": "Finnland", "FJ": "F\u00eddj\u00edeyjar", "CI": "F\u00edlabeinsstr\u00f6ndin", "FR": "Frakkland", "GF": "Franska Gv\u00e6jana", "PF": "Franska P\u00f3l\u00fdnes\u00eda", "TF": "Fr\u00f6nsku su\u00f0l\u00e6gu landsv\u00e6\u00f0in", "FO": "F\u00e6reyjar", "GA": "Gabon", "GM": "Gamb\u00eda", "GH": "Gana", "GE": "Georg\u00eda", "GI": "G\u00edbraltar", "GN": "G\u00ednea", "GW": "G\u00ednea-Biss\u00e1", "GD": "Grenada", "GR": "Grikkland", "CV": "Gr\u00e6nh\u00f6f\u00f0aeyjar", "GL": "Gr\u00e6nland", "GG": "Guernsey", "GP": "Gvadel\u00fapeyjar", "GU": "Gvam", "GT": "Gvatemala", "GY": "Gv\u00e6jana", "HT": "Ha\u00edt\u00ed", "HM": "Heard og McDonaldseyjar", "NL": "Holland", "HN": "Hond\u00faras", "BY": "Hv\u00edta-R\u00fassland", "IN": "Indland", "ID": "Ind\u00f3nes\u00eda", "IQ": "\u00cdrak", "IR": "\u00cdran", "IE": "\u00cdrland", "IS": "\u00cdsland", "IL": "\u00cdsrael", "IT": "\u00cdtal\u00eda", "JM": "Jama\u00edka", "JP": "Japan", "YE": "Jemen", "CX": "J\u00f3laey", "JO": "J\u00f3rdan\u00eda", "KH": "Kamb\u00f3d\u00eda", "CM": "Kamer\u00fan", "CA": "Kanada", "BQ": "Kar\u00edbahafshluti Hollands", "KZ": "Kasakstan", "QA": "Katar", "KE": "Ken\u00eda", "KG": "Kirgistan", "CN": "K\u00edna", "KI": "K\u00edribat\u00ed", "CG": "Kong\u00f3-Brazzaville", "CD": "Kong\u00f3-Kinshasa", "CR": "Kostar\u00edka", "CC": "K\u00f3koseyjar (Keeling)", "CO": "K\u00f3lumb\u00eda", "KM": "K\u00f3moreyjar", "HR": "Kr\u00f3at\u00eda", "CU": "K\u00faba", "KW": "K\u00faveit", "CY": "K\u00fdpur", "LA": "Laos", "LS": "Les\u00f3t\u00f3", "LV": "Lettland", "LI": "Liechtenstein", "LT": "Lith\u00e1en", "LB": "L\u00edbanon", "LR": "L\u00edber\u00eda", "LY": "L\u00edb\u00eda", "LU": "L\u00faxemborg", "MG": "Madagaskar", "MY": "Malas\u00eda", "MW": "Malav\u00ed", "MV": "Mald\u00edveyjar", "ML": "Mal\u00ed", "MT": "Malta", "MA": "Marokk\u00f3", "MQ": "Martin\u00edk", "YT": "Mayotte", "MR": "M\u00e1ritan\u00eda", "MU": "M\u00e1rit\u00edus", "MX": "Mex\u00edk\u00f3", "CF": "Mi\u00f0-Afr\u00edkul\u00fd\u00f0veldi\u00f0", "GQ": "Mi\u00f0baugs-G\u00ednea", "MM": "Mjanmar (B\u00farma)", "MD": "Mold\u00f3va", "MN": "Mong\u00f3l\u00eda", "MS": "Montserrat", "MC": "M\u00f3nak\u00f3", "MZ": "M\u00f3samb\u00edk", "IM": "M\u00f6n", "NA": "Namib\u00eda", "NR": "N\u00e1r\u00fa", "NP": "Nepal", "NU": "Niue", "NE": "N\u00edger", "NG": "N\u00edger\u00eda", "NI": "N\u00edkaragva", "KP": "Nor\u00f0ur-K\u00f3rea", "MK": "Nor\u00f0ur-Maked\u00f3n\u00eda", "NO": "Noregur", "NF": "Norfolkeyja", "NC": "N\u00fdja-Kaled\u00f3n\u00eda", "NZ": "N\u00fdja-Sj\u00e1land", "OM": "\u00d3man", "PK": "Pakistan", "PW": "Pal\u00e1", "PA": "Panama", "PG": "Pap\u00faa N\u00fdja-G\u00ednea", "PY": "Paragv\u00e6", "PE": "Per\u00fa", "PN": "Pitcairn-eyjar", "PT": "Port\u00fagal", "PL": "P\u00f3lland", "PR": "P\u00faert\u00f3 R\u00edk\u00f3", "RE": "R\u00e9union", "RW": "R\u00faanda", "RO": "R\u00famen\u00eda", "RU": "R\u00fassland", "MF": "Saint-Martin", "SB": "Sal\u00f3monseyjar", "ZM": "Samb\u00eda", "AE": "Sameinu\u00f0u arab\u00edsku furstad\u00e6min", "WS": "Sam\u00f3a", "SM": "San Mar\u00edn\u00f3", "BL": "Sankti Bart\u00f3l\u00f3meusareyjar", "SH": "Sankti Helena", "KN": "Sankti Kitts og Nevis", "LC": "Sankti L\u00fas\u00eda", "SX": "Sankti Martin", "PM": "Sankti Pierre og Miquelon", "VC": "Sankti Vinsent og Grenad\u00edneyjar", "ST": "Sa\u00f3 T\u00f3me og Prins\u00edpe", "SA": "S\u00e1di-Arab\u00eda", "SN": "Senegal", "RS": "Serb\u00eda", "SC": "Seychelles-eyjar", "HK": "s\u00e9rstj\u00f3rnarsv\u00e6\u00f0i\u00f0 Hong Kong", "MO": "s\u00e9rstj\u00f3rnarsv\u00e6\u00f0i\u00f0 Maka\u00f3", "ZW": "Simbabve", "SG": "Singap\u00far", "SL": "S\u00ederra Le\u00f3ne", "CL": "S\u00edle", "SK": "Sl\u00f3vak\u00eda", "SI": "Sl\u00f3ven\u00eda", "SO": "S\u00f3mal\u00eda", "ES": "Sp\u00e1nn", "LK": "Sr\u00ed Lanka", "ZA": "Su\u00f0ur-Afr\u00edka", "GS": "Su\u00f0ur-Georg\u00eda og Su\u00f0ur-Sandv\u00edkureyjar", "KR": "Su\u00f0ur-K\u00f3rea", "SS": "Su\u00f0ur-S\u00fadan", "AQ": "Su\u00f0urskautslandi\u00f0", "SD": "S\u00fadan", "SR": "S\u00far\u00ednam", "SJ": "Svalbar\u00f0i og Jan Mayen", "ME": "Svartfjallaland", "SZ": "Svas\u00edland", "CH": "Sviss", "SE": "Sv\u00ed\u00fej\u00f3\u00f0", "SY": "S\u00fdrland", "TJ": "Tadsjikistan", "TH": "Ta\u00edland", "TW": "Ta\u00edvan", "TZ": "Tansan\u00eda", "CZ": "T\u00e9kkland", "TL": "T\u00edmor-Leste", "TO": "Tonga", "TG": "T\u00f3g\u00f3", "TK": "T\u00f3kel\u00e1", "TT": "Tr\u00ednidad og T\u00f3bag\u00f3", "TD": "Tsjad", "TC": "Turks- og Caicoseyjar", "TN": "T\u00fanis", "TM": "T\u00farkmenistan", "TR": "Tyrkland", "HU": "Ungverjaland", "UG": "\u00daganda", "UA": "\u00dakra\u00edna", "UY": "\u00dar\u00fagv\u00e6", "UZ": "\u00dasbekistan", "VU": "Van\u00faat\u00fa", "VA": "Vat\u00edkani\u00f0", "VE": "Venes\u00faela", "EH": "Vestur-Sahara", "VN": "V\u00edetnam", "WF": "Wallis- og F\u00fat\u00fanaeyjar", "DE": "\u00de\u00fdskaland"}onionshare-2.6.3/desktop/onionshare/resources/countries/it.json000066400000000000000000000113441475545702100250560ustar00rootroot00000000000000{"AF": "Afghanistan", "AL": "Albania", "DZ": "Algeria", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antartide", "AG": "Antigua e Barbuda", "SA": "Arabia Saudita", "AR": "Argentina", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "AZ": "Azerbaigian", "BS": "Bahamas", "BH": "Bahrein", "BD": "Bangladesh", "BB": "Barbados", "BE": "Belgio", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BY": "Bielorussia", "BO": "Bolivia", "BA": "Bosnia ed Erzegovina", "BW": "Botswana", "BR": "Brasile", "BN": "Brunei", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "KH": "Cambogia", "CM": "Camerun", "CA": "Canada", "CV": "Capo Verde", "BQ": "Caraibi olandesi", "CZ": "Cechia", "TD": "Ciad", "CL": "Cile", "CN": "Cina", "CY": "Cipro", "VA": "Citt\u00e0 del Vaticano", "CO": "Colombia", "KM": "Comore", "CD": "Congo - Kinshasa", "CG": "Congo-Brazzaville", "KP": "Corea del Nord", "KR": "Corea del Sud", "CI": "Costa d\u2019Avorio", "CR": "Costa Rica", "HR": "Croazia", "CU": "Cuba", "CW": "Cura\u00e7ao", "DK": "Danimarca", "DM": "Dominica", "EC": "Ecuador", "EG": "Egitto", "SV": "El Salvador", "AE": "Emirati Arabi Uniti", "ER": "Eritrea", "EE": "Estonia", "ET": "Etiopia", "FJ": "Figi", "PH": "Filippine", "FI": "Finlandia", "FR": "Francia", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "GS": "Georgia del Sud e Sandwich australi", "DE": "Germania", "GH": "Ghana", "JM": "Giamaica", "JP": "Giappone", "GI": "Gibilterra", "DJ": "Gibuti", "JO": "Giordania", "GR": "Grecia", "GD": "Grenada", "GL": "Groenlandia", "GP": "Guadalupa", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GQ": "Guinea Equatoriale", "GW": "Guinea-Bissau", "GY": "Guyana", "GF": "Guyana francese", "HT": "Haiti", "HN": "Honduras", "IN": "India", "ID": "Indonesia", "IR": "Iran", "IQ": "Iraq", "IE": "Irlanda", "IS": "Islanda", "BV": "Isola Bouvet", "CX": "Isola Christmas", "IM": "Isola di Man", "NF": "Isola Norfolk", "AX": "Isole \u00c5land", "KY": "Isole Cayman", "CC": "Isole Cocos (Keeling)", "CK": "Isole Cook", "FO": "Isole F\u00e6r \u00d8er", "FK": "Isole Falkland", "HM": "Isole Heard e McDonald", "PN": "Isole Pitcairn", "SB": "Isole Salomone", "TC": "Isole Turks e Caicos", "VI": "Isole Vergini Americane", "VG": "Isole Vergini Britanniche", "IL": "Israele", "IT": "Italia", "KZ": "Kazakistan", "KE": "Kenya", "KG": "Kirghizistan", "KI": "Kiribati", "KW": "Kuwait", "LA": "Laos", "LS": "Lesotho", "LV": "Lettonia", "LB": "Libano", "LR": "Liberia", "LY": "Libia", "LI": "Liechtenstein", "LT": "Lituania", "LU": "Lussemburgo", "MK": "Macedonia del Nord", "MG": "Madagascar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldive", "ML": "Mali", "MT": "Malta", "MA": "Marocco", "MQ": "Martinica", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Messico", "MD": "Moldavia", "MC": "Monaco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mozambico", "MM": "Myanmar (Birmania)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "NO": "Norvegia", "NC": "Nuova Caledonia", "NZ": "Nuova Zelanda", "OM": "Oman", "NL": "Paesi Bassi", "PK": "Pakistan", "PW": "Palau", "PA": "Panam\u00e1", "PG": "Papua Nuova Guinea", "PY": "Paraguay", "PE": "Per\u00f9", "PF": "Polinesia francese", "PL": "Polonia", "PT": "Portogallo", "PR": "Portorico", "QA": "Qatar", "HK": "RAS di Hong Kong", "MO": "RAS di Macao", "GB": "Regno Unito", "CF": "Repubblica Centrafricana", "DO": "Repubblica Dominicana", "RE": "Riunione", "RO": "Romania", "RW": "Ruanda", "RU": "Russia", "EH": "Sahara occidentale", "KN": "Saint Kitts e Nevis", "LC": "Saint Lucia", "MF": "Saint Martin", "VC": "Saint Vincent e Grenadine", "BL": "Saint-Barth\u00e9lemy", "PM": "Saint-Pierre e Miquelon", "WS": "Samoa", "AS": "Samoa americane", "SM": "San Marino", "SH": "Sant\u2019Elena", "ST": "S\u00e3o Tom\u00e9 e Pr\u00edncipe", "SN": "Senegal", "RS": "Serbia", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SY": "Siria", "SK": "Slovacchia", "SI": "Slovenia", "SO": "Somalia", "ES": "Spagna", "LK": "Sri Lanka", "US": "Stati Uniti", "SS": "Sud Sudan", "ZA": "Sudafrica", "SD": "Sudan", "SR": "Suriname", "SJ": "Svalbard e Jan Mayen", "SE": "Svezia", "CH": "Svizzera", "SZ": "Swaziland", "TJ": "Tagikistan", "TW": "Taiwan", "TZ": "Tanzania", "TF": "Terre australi francesi", "IO": "Territorio britannico dell\u2019Oceano Indiano", "TH": "Thailandia", "TL": "Timor Est", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad e Tobago", "TN": "Tunisia", "TR": "Turchia", "TM": "Turkmenistan", "UA": "Ucraina", "UG": "Uganda", "HU": "Ungheria", "UY": "Uruguay", "UZ": "Uzbekistan", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis e Futuna", "YE": "Yemen", "ZM": "Zambia", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/ja.json000066400000000000000000000242211475545702100250320ustar00rootroot00000000000000{"IS": "\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9", "IE": "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9", "AZ": "\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3", "AF": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3", "US": "\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd", "AE": "\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6", "DZ": "\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2", "AR": "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3", "AW": "\u30a2\u30eb\u30d0", "AL": "\u30a2\u30eb\u30d0\u30cb\u30a2", "AM": "\u30a2\u30eb\u30e1\u30cb\u30a2", "AI": "\u30a2\u30f3\u30ae\u30e9", "AO": "\u30a2\u30f3\u30b4\u30e9", "AG": "\u30a2\u30f3\u30c6\u30a3\u30b0\u30a2\u30fb\u30d0\u30fc\u30d6\u30fc\u30c0", "AD": "\u30a2\u30f3\u30c9\u30e9", "YE": "\u30a4\u30a8\u30e1\u30f3", "GB": "\u30a4\u30ae\u30ea\u30b9", "IL": "\u30a4\u30b9\u30e9\u30a8\u30eb", "IT": "\u30a4\u30bf\u30ea\u30a2", "IQ": "\u30a4\u30e9\u30af", "IR": "\u30a4\u30e9\u30f3", "IN": "\u30a4\u30f3\u30c9", "ID": "\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2", "WF": "\u30a6\u30a9\u30ea\u30b9\u30fb\u30d5\u30c4\u30ca", "UG": "\u30a6\u30ac\u30f3\u30c0", "UA": "\u30a6\u30af\u30e9\u30a4\u30ca", "UZ": "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3", "UY": "\u30a6\u30eb\u30b0\u30a2\u30a4", "EC": "\u30a8\u30af\u30a2\u30c9\u30eb", "EG": "\u30a8\u30b8\u30d7\u30c8", "EE": "\u30a8\u30b9\u30c8\u30cb\u30a2", "SZ": "\u30a8\u30b9\u30ef\u30c6\u30a3\u30cb", "ET": "\u30a8\u30c1\u30aa\u30d4\u30a2", "ER": "\u30a8\u30ea\u30c8\u30ea\u30a2", "SV": "\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb", "AU": "\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2", "AT": "\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2", "AX": "\u30aa\u30fc\u30e9\u30f3\u30c9\u8af8\u5cf6", "OM": "\u30aa\u30de\u30fc\u30f3", "NL": "\u30aa\u30e9\u30f3\u30c0", "BQ": "\u30aa\u30e9\u30f3\u30c0\u9818\u30ab\u30ea\u30d6", "GH": "\u30ac\u30fc\u30ca", "CV": "\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7", "GG": "\u30ac\u30fc\u30f3\u30b8\u30fc", "GY": "\u30ac\u30a4\u30a2\u30ca", "KZ": "\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3", "QA": "\u30ab\u30bf\u30fc\u30eb", "CA": "\u30ab\u30ca\u30c0", "GA": "\u30ac\u30dc\u30f3", "CM": "\u30ab\u30e1\u30eb\u30fc\u30f3", "GM": "\u30ac\u30f3\u30d3\u30a2", "KH": "\u30ab\u30f3\u30dc\u30b8\u30a2", "GN": "\u30ae\u30cb\u30a2", "GW": "\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6", "CY": "\u30ad\u30d7\u30ed\u30b9", "CU": "\u30ad\u30e5\u30fc\u30d0", "CW": "\u30ad\u30e5\u30e9\u30bd\u30fc", "GR": "\u30ae\u30ea\u30b7\u30e3", "KI": "\u30ad\u30ea\u30d0\u30b9", "KG": "\u30ad\u30eb\u30ae\u30b9", "GT": "\u30b0\u30a2\u30c6\u30de\u30e9", "GP": "\u30b0\u30a2\u30c9\u30eb\u30fc\u30d7", "GU": "\u30b0\u30a2\u30e0", "KW": "\u30af\u30a6\u30a7\u30fc\u30c8", "CK": "\u30af\u30c3\u30af\u8af8\u5cf6", "GL": "\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9", "CX": "\u30af\u30ea\u30b9\u30de\u30b9\u5cf6", "GD": "\u30b0\u30ec\u30ca\u30c0", "HR": "\u30af\u30ed\u30a2\u30c1\u30a2", "KY": "\u30b1\u30a4\u30de\u30f3\u8af8\u5cf6", "KE": "\u30b1\u30cb\u30a2", "CI": "\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb", "CC": "\u30b3\u30b3\u30b9(\u30ad\u30fc\u30ea\u30f3\u30b0)\u8af8\u5cf6", "CR": "\u30b3\u30b9\u30bf\u30ea\u30ab", "KM": "\u30b3\u30e2\u30ed", "CO": "\u30b3\u30ed\u30f3\u30d3\u30a2", "CG": "\u30b3\u30f3\u30b4\u5171\u548c\u56fd(\u30d6\u30e9\u30b6\u30d3\u30eb)", "CD": "\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd(\u30ad\u30f3\u30b7\u30e3\u30b5)", "SA": "\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2", "GS": "\u30b5\u30a6\u30b9\u30b8\u30e7\u30fc\u30b8\u30a2\u30fb\u30b5\u30a6\u30b9\u30b5\u30f3\u30c9\u30a6\u30a3\u30c3\u30c1\u8af8\u5cf6", "WS": "\u30b5\u30e2\u30a2", "BL": "\u30b5\u30f3\u30fb\u30d0\u30eb\u30c6\u30eb\u30df\u30fc", "MF": "\u30b5\u30f3\u30fb\u30de\u30eb\u30bf\u30f3", "ST": "\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da", "ZM": "\u30b6\u30f3\u30d3\u30a2", "PM": "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u5cf6\u30fb\u30df\u30af\u30ed\u30f3\u5cf6", "SM": "\u30b5\u30f3\u30de\u30ea\u30ce", "SL": "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd", "DJ": "\u30b8\u30d6\u30c1", "GI": "\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb", "JM": "\u30b8\u30e3\u30de\u30a4\u30ab", "GE": "\u30b8\u30e7\u30fc\u30b8\u30a2", "SY": "\u30b7\u30ea\u30a2", "SG": "\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb", "SX": "\u30b7\u30f3\u30c8\u30fb\u30de\u30fc\u30eb\u30c6\u30f3", "ZW": "\u30b8\u30f3\u30d0\u30d6\u30a8", "CH": "\u30b9\u30a4\u30b9", "SE": "\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3", "SD": "\u30b9\u30fc\u30c0\u30f3", "SJ": "\u30b9\u30d0\u30fc\u30eb\u30d0\u30eb\u8af8\u5cf6\u30fb\u30e4\u30f3\u30de\u30a4\u30a8\u30f3\u5cf6", "ES": "\u30b9\u30da\u30a4\u30f3", "SR": "\u30b9\u30ea\u30ca\u30e0", "LK": "\u30b9\u30ea\u30e9\u30f3\u30ab", "SK": "\u30b9\u30ed\u30d0\u30ad\u30a2", "SI": "\u30b9\u30ed\u30d9\u30cb\u30a2", "SC": "\u30bb\u30fc\u30b7\u30a7\u30eb", "SN": "\u30bb\u30cd\u30ac\u30eb", "RS": "\u30bb\u30eb\u30d3\u30a2", "KN": "\u30bb\u30f3\u30c8\u30af\u30ea\u30b9\u30c8\u30d5\u30a1\u30fc\u30fb\u30cd\u30fc\u30f4\u30a3\u30b9", "VC": "\u30bb\u30f3\u30c8\u30d3\u30f3\u30bb\u30f3\u30c8\u53ca\u3073\u30b0\u30ec\u30ca\u30c7\u30a3\u30fc\u30f3\u8af8\u5cf6", "SH": "\u30bb\u30f3\u30c8\u30d8\u30ec\u30ca", "LC": "\u30bb\u30f3\u30c8\u30eb\u30b7\u30a2", "SO": "\u30bd\u30de\u30ea\u30a2", "SB": "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6", "TC": "\u30bf\u30fc\u30af\u30b9\u30fb\u30ab\u30a4\u30b3\u30b9\u8af8\u5cf6", "TH": "\u30bf\u30a4", "TJ": "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3", "TZ": "\u30bf\u30f3\u30b6\u30cb\u30a2", "CZ": "\u30c1\u30a7\u30b3", "TD": "\u30c1\u30e3\u30c9", "TN": "\u30c1\u30e5\u30cb\u30b8\u30a2", "CL": "\u30c1\u30ea", "DK": "\u30c7\u30f3\u30de\u30fc\u30af", "DE": "\u30c9\u30a4\u30c4", "TG": "\u30c8\u30fc\u30b4", "TK": "\u30c8\u30b1\u30e9\u30a6", "DO": "\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd", "DM": "\u30c9\u30df\u30cb\u30ab\u56fd", "TT": "\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4", "TM": "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3", "TR": "\u30c8\u30eb\u30b3", "TO": "\u30c8\u30f3\u30ac", "NG": "\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2", "NR": "\u30ca\u30a6\u30eb", "NA": "\u30ca\u30df\u30d3\u30a2", "NU": "\u30cb\u30a6\u30a8", "NI": "\u30cb\u30ab\u30e9\u30b0\u30a2", "NE": "\u30cb\u30b8\u30a7\u30fc\u30eb", "NC": "\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2", "NZ": "\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9", "NP": "\u30cd\u30d1\u30fc\u30eb", "NF": "\u30ce\u30fc\u30d5\u30a9\u30fc\u30af\u5cf6", "NO": "\u30ce\u30eb\u30a6\u30a7\u30fc", "HM": "\u30cf\u30fc\u30c9\u5cf6\u30fb\u30de\u30af\u30c9\u30ca\u30eb\u30c9\u8af8\u5cf6", "BH": "\u30d0\u30fc\u30ec\u30fc\u30f3", "HT": "\u30cf\u30a4\u30c1", "PK": "\u30d1\u30ad\u30b9\u30bf\u30f3", "VA": "\u30d0\u30c1\u30ab\u30f3\u5e02\u56fd", "PA": "\u30d1\u30ca\u30de", "VU": "\u30d0\u30cc\u30a2\u30c4", "BS": "\u30d0\u30cf\u30de", "PG": "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2", "BM": "\u30d0\u30df\u30e5\u30fc\u30c0", "PW": "\u30d1\u30e9\u30aa", "PY": "\u30d1\u30e9\u30b0\u30a2\u30a4", "BB": "\u30d0\u30eb\u30d0\u30c9\u30b9", "HU": "\u30cf\u30f3\u30ac\u30ea\u30fc", "BD": "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5", "PN": "\u30d4\u30c8\u30b1\u30a2\u30f3\u8af8\u5cf6", "FJ": "\u30d5\u30a3\u30b8\u30fc", "PH": "\u30d5\u30a3\u30ea\u30d4\u30f3", "FI": "\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9", "BT": "\u30d6\u30fc\u30bf\u30f3", "BV": "\u30d6\u30fc\u30d9\u5cf6", "PR": "\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3", "FO": "\u30d5\u30a7\u30ed\u30fc\u8af8\u5cf6", "FK": "\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6", "BR": "\u30d6\u30e9\u30b8\u30eb", "FR": "\u30d5\u30e9\u30f3\u30b9", "BG": "\u30d6\u30eb\u30ac\u30ea\u30a2", "BF": "\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd", "BN": "\u30d6\u30eb\u30cd\u30a4", "BI": "\u30d6\u30eb\u30f3\u30b8", "VN": "\u30d9\u30c8\u30ca\u30e0", "BJ": "\u30d9\u30ca\u30f3", "VE": "\u30d9\u30cd\u30ba\u30a8\u30e9", "BY": "\u30d9\u30e9\u30eb\u30fc\u30b7", "BZ": "\u30d9\u30ea\u30fc\u30ba", "PE": "\u30da\u30eb\u30fc", "BE": "\u30d9\u30eb\u30ae\u30fc", "PL": "\u30dd\u30fc\u30e9\u30f3\u30c9", "BA": "\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca", "BW": "\u30dc\u30c4\u30ef\u30ca", "BO": "\u30dc\u30ea\u30d3\u30a2", "PT": "\u30dd\u30eb\u30c8\u30ac\u30eb", "HN": "\u30db\u30f3\u30b8\u30e5\u30e9\u30b9", "MG": "\u30de\u30c0\u30ac\u30b9\u30ab\u30eb", "YT": "\u30de\u30e8\u30c3\u30c8", "MW": "\u30de\u30e9\u30a6\u30a4", "ML": "\u30de\u30ea", "MT": "\u30de\u30eb\u30bf", "MQ": "\u30de\u30eb\u30c6\u30a3\u30cb\u30fc\u30af", "MY": "\u30de\u30ec\u30fc\u30b7\u30a2", "IM": "\u30de\u30f3\u5cf6", "MM": "\u30df\u30e3\u30f3\u30de\u30fc (\u30d3\u30eb\u30de)", "MX": "\u30e1\u30ad\u30b7\u30b3", "MU": "\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9", "MR": "\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2", "MZ": "\u30e2\u30b6\u30f3\u30d3\u30fc\u30af", "MC": "\u30e2\u30ca\u30b3", "MV": "\u30e2\u30eb\u30c7\u30a3\u30d6", "MD": "\u30e2\u30eb\u30c9\u30d0", "MA": "\u30e2\u30ed\u30c3\u30b3", "MN": "\u30e2\u30f3\u30b4\u30eb", "ME": "\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed", "MS": "\u30e2\u30f3\u30c8\u30bb\u30e9\u30c8", "JO": "\u30e8\u30eb\u30c0\u30f3", "LA": "\u30e9\u30aa\u30b9", "LV": "\u30e9\u30c8\u30d3\u30a2", "LT": "\u30ea\u30c8\u30a2\u30cb\u30a2", "LY": "\u30ea\u30d3\u30a2", "LI": "\u30ea\u30d2\u30c6\u30f3\u30b7\u30e5\u30bf\u30a4\u30f3", "LR": "\u30ea\u30d9\u30ea\u30a2", "RO": "\u30eb\u30fc\u30de\u30cb\u30a2", "LU": "\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af", "RW": "\u30eb\u30ef\u30f3\u30c0", "LS": "\u30ec\u30bd\u30c8", "LB": "\u30ec\u30d0\u30ce\u30f3", "RE": "\u30ec\u30e6\u30cb\u30aa\u30f3", "RU": "\u30ed\u30b7\u30a2", "IO": "\u82f1\u9818\u30a4\u30f3\u30c9\u6d0b\u5730\u57df", "VG": "\u82f1\u9818\u30f4\u30a1\u30fc\u30b8\u30f3\u8af8\u5cf6", "KR": "\u97d3\u56fd", "EH": "\u897f\u30b5\u30cf\u30e9", "GQ": "\u8d64\u9053\u30ae\u30cb\u30a2", "TW": "\u53f0\u6e7e", "CF": "\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "MO": "\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u56fd\u30de\u30ab\u30aa\u7279\u5225\u884c\u653f\u533a", "HK": "\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u56fd\u9999\u6e2f\u7279\u5225\u884c\u653f\u533a", "CN": "\u4e2d\u56fd", "TL": "\u6771\u30c6\u30a3\u30e2\u30fc\u30eb", "ZA": "\u5357\u30a2\u30d5\u30ea\u30ab", "SS": "\u5357\u30b9\u30fc\u30c0\u30f3", "AQ": "\u5357\u6975", "JP": "\u65e5\u672c", "GF": "\u4ecf\u9818\u30ae\u30a2\u30ca", "PF": "\u4ecf\u9818\u30dd\u30ea\u30cd\u30b7\u30a2", "TF": "\u4ecf\u9818\u6975\u5357\u8af8\u5cf6", "VI": "\u7c73\u9818\u30f4\u30a1\u30fc\u30b8\u30f3\u8af8\u5cf6", "AS": "\u7c73\u9818\u30b5\u30e2\u30a2", "MK": "\u5317\u30de\u30b1\u30c9\u30cb\u30a2", "KP": "\u5317\u671d\u9bae"}onionshare-2.6.3/desktop/onionshare/resources/countries/km.json000066400000000000000000000407201475545702100250510ustar00rootroot00000000000000{"KH": "\u1780\u1798\u17d2\u1796\u17bb\u1787\u17b6", "CA": "\u1780\u17b6\u178e\u17b6\u178a\u17b6", "QA": "\u1780\u17b6\u178f\u17b6", "CV": "\u1780\u17b6\u1794\u17cb\u179c\u17c2\u179a", "CM": "\u1780\u17b6\u1798\u17c1\u179a\u17bc\u1793", "KZ": "\u1780\u17b6\u17a0\u17d2\u179f\u17b6\u1780\u17cb\u179f\u17d2\u1790\u17b6\u1793", "CG": "\u1780\u17bb\u1784\u17a0\u17d2\u1782\u17c4 - \u1794\u17d2\u179a\u17b6\u17a0\u17d2\u179f\u17b6\u179c\u17b8\u179b", "CD": "\u1780\u17bb\u1784\u17a0\u17d2\u1782\u17c4- \u1782\u17b8\u1793\u179f\u17d2\u17a0\u17b6\u179f\u17b6", "CI": "\u1780\u17bc\u178f\u178c\u17b8\u179c\u17d0\u179a", "KM": "\u1780\u17bc\u1798\u17d0\u179a", "CW": "\u1780\u17bc\u179a\u17c9\u17b6\u1780\u17c5", "KP": "\u1780\u17bc\u179a\u17c9\u17c1\u200b\u1781\u17b6\u1784\u200b\u1787\u17be\u1784", "KR": "\u1780\u17bc\u179a\u17c9\u17c1\u200b\u1781\u17b6\u1784\u200b\u178f\u17d2\u1794\u17bc\u1784", "KW": "\u1780\u17bc\u179c\u17c9\u17c2\u178f", "CR": "\u1780\u17bc\u179f\u17d2\u178f\u17b6\u179a\u17b8\u1780\u17b6", "CO": "\u1780\u17bc\u17a1\u17bb\u17c6\u1794\u17ca\u17b8", "KG": "\u1780\u17c0\u17a0\u17d2\u179f\u17ca\u17b8\u179f\u17ca\u17b8\u179f\u17d2\u1790\u17b6\u1793", "KE": "\u1780\u17c1\u1793\u1799\u17c9\u17b6", "CC": "\u1780\u17c4\u17c7\u200b\u1780\u17bc\u1780\u17bc\u179f (\u1782\u17b8\u179b\u17b8\u1784)", "KY": "\u1780\u17c4\u17c7\u200b\u1780\u17c3\u1798\u17c9\u1784\u17cb", "CK": "\u1780\u17c4\u17c7\u200b\u1781\u17bc\u1780", "CX": "\u1780\u17c4\u17c7\u200b\u1782\u17d2\u179a\u17b8\u179f\u17d2\u1798\u17b6\u179f", "NF": "\u1780\u17c4\u17c7\u200b\u178e\u17d0\u179a\u17a0\u17d2\u179c\u1780\u17cb", "TC": "\u1780\u17c4\u17c7\u200b\u1791\u17bd\u1782 \u1793\u17b7\u1784 \u1780\u17c3\u1780\u17bc\u179f", "BV": "\u1780\u17c4\u17c7\u200b\u1794\u17ca\u17bc\u179c\u17c9\u17c1\u178f", "PN": "\u1780\u17c4\u17c7\u200b\u1797\u17b8\u178f\u1780\u17b6\u1793", "VG": "\u1780\u17c4\u17c7\u200b\u179c\u17ba\u1787\u17b7\u1793\u200b\u1785\u1780\u17d2\u179a\u1797\u1796\u200b\u17a2\u1784\u17cb\u1782\u17d2\u179b\u17c1\u179f", "VI": "\u1780\u17c4\u17c7\u200b\u179c\u17ba\u1787\u17b8\u1793\u200b\u17a2\u17b6\u1798\u17c1\u179a\u17b7\u1780", "SB": "\u1780\u17c4\u17c7\u200b\u179f\u17bc\u17a1\u17bc\u1798\u17c9\u17bb\u1784", "HM": "\u1780\u17c4\u17c7\u200b\u17a0\u17ba\u178a \u1793\u17b7\u1784\u200b\u1798\u17c9\u17b6\u1780\u17cb\u178a\u17bc\u178e\u17b6\u179b\u17cb", "FK": "\u1780\u17c4\u17c7\u200b\u17a0\u17d2\u179c\u1780\u17cb\u17a1\u17c2\u1793", "FO": "\u1780\u17c4\u17c7\u200b\u17a0\u17d2\u179c\u17b6\u179a\u17c9\u17bc", "GS": "\u1780\u17c4\u17c7\u200b\u17a0\u17d2\u179f\u1780\u17a0\u17d2\u179f\u17ca\u17b8\u200b\u1781\u17b6\u1784\u178f\u17d2\u1794\u17bc\u1784 \u1793\u17b7\u1784 \u179f\u1784\u17cb\u179c\u17b7\u1785\u200b\u1781\u17b6\u1784\u178f\u17d2\u1794\u17bc\u1784", "AX": "\u1780\u17c4\u17c7\u200b\u17a2\u17b6\u17a1\u1784\u17cb", "GR": "\u1780\u17d2\u179a\u17b7\u1780", "HR": "\u1780\u17d2\u179a\u17bc\u17a2\u17b6\u179f\u17ca\u17b8", "GT": "\u1780\u17d2\u179c\u17b6\u178f\u17c1\u1798\u17c9\u17b6\u17a1\u17b6", "KI": "\u1782\u17b7\u179a\u17b8\u1794\u17b6\u1791\u17b8", "CU": "\u1782\u17bb\u1799\u1794\u17b6", "GB": "\u1785\u1780\u17d2\u179a\u1797\u1796\u200b\u17a2\u1784\u17cb\u1782\u17d2\u179b\u17c1\u179f", "CN": "\u1785\u17b7\u1793", "TD": "\u1786\u17b6\u178a", "CZ": "\u1786\u17c2\u1782\u17b6", "JP": "\u1787\u1794\u17c9\u17bb\u1793", "DJ": "\u1787\u17b8\u1794\u17ca\u17bc\u1791\u17b8", "DK": "\u178a\u17b6\u178e\u17ba\u1798\u17c9\u17b6\u1780", "DM": "\u178a\u17bc\u1798\u17b8\u1793\u17b8\u1780", "TF": "\u178a\u17c2\u1793\u178a\u17b8\u200b\u1794\u17b6\u179a\u17b6\u17c6\u1784\u200b\u1793\u17c5\u200b\u1797\u17b6\u1782\u1781\u17b6\u1784\u178f\u17d2\u1794\u17bc\u1784", "IO": "\u178a\u17c2\u1793\u178a\u17b8\u200b\u17a2\u1784\u17cb\u1782\u17d2\u179b\u17c1\u179f\u200b\u1793\u17c5\u200b\u1798\u17a0\u17b6\u200b\u179f\u1798\u17bb\u1791\u17d2\u179a\u200b\u17a5\u178e\u17d2\u178c\u17b6", "NA": "\u178e\u17b6\u1798\u17b8\u1794\u17ca\u17b8", "NR": "\u178e\u17bc\u179a\u17bc", "NU": "\u178e\u17c0", "TZ": "\u178f\u1784\u17cb\u179f\u17b6\u1793\u17b8", "TJ": "\u178f\u17b6\u17a0\u17d2\u179f\u17ca\u17b8\u1782\u17b8\u179f\u17d2\u1790\u17b6\u1793", "TO": "\u178f\u17bb\u1784\u17a0\u17d2\u1782\u17b6", "TK": "\u178f\u17bc\u1781\u17c1\u17a1\u17c5", "TG": "\u178f\u17bc\u17a0\u17d2\u1782\u17c4", "TR": "\u178f\u17bd\u1780\u1782\u17b8", "TM": "\u178f\u17bd\u1780\u1798\u17c9\u17c1\u1793\u17b8\u179f\u17d2\u1790\u17b6\u1793", "TW": "\u178f\u17c3\u179c\u17c9\u17b6\u1793\u17cb", "TH": "\u1790\u17c3", "TL": "\u1791\u17b8\u1798\u17d0\u179a\u179b\u17c1\u179f\u17d2\u178f\u17c1", "TN": "\u1791\u17bb\u1799\u1793\u17b8\u179f\u17ca\u17b8", "TT": "\u1791\u17d2\u179a\u17b8\u1793\u17b8\u178a\u17b6\u178f \u1793\u17b7\u1784\u200b\u178f\u17bc\u1794\u17b6\u17a0\u17d2\u1782\u17c4", "NO": "\u1793\u17d0\u179a\u179c\u17c2\u179f", "NI": "\u1793\u17b8\u1780\u17b6\u179a\u17c9\u17b6\u17a0\u17d2\u1782\u17b6", "NE": "\u1793\u17b8\u17a0\u17d2\u179f\u17c1", "NG": "\u1793\u17b8\u17a0\u17d2\u179f\u17c1\u179a\u17b8\u1799\u17c9\u17b6", "NC": "\u1793\u17bc\u179c\u17c2\u179b\u200b\u1780\u17b6\u17a1\u17c1\u178a\u17bc\u1793\u17b8", "NZ": "\u1793\u17bc\u179c\u17c2\u179b\u200b\u179f\u17c1\u17a1\u1784\u17cb", "NP": "\u1793\u17c1\u1794\u17c9\u17b6\u179b\u17cb", "BD": "\u1794\u1784\u17cb\u1780\u17d2\u179b\u17b6\u178a\u17c2\u179f", "PK": "\u1794\u17c9\u17b6\u1782\u17b8\u179f\u17d2\u1790\u17b6\u1793", "PA": "\u1794\u17c9\u17b6\u178e\u17b6\u1798\u17c9\u17b6", "BB": "\u1794\u17b6\u1794\u17b6\u178a\u17bb\u179f", "PG": "\u1794\u17c9\u17b6\u1796\u17bc\u17a2\u17b6\u179f\u17ca\u17b8\u200b\u1793\u17bc\u179c\u17c2\u179b\u17a0\u17d2\u1782\u17b8\u178e\u17c1", "PY": "\u1794\u17c9\u17b6\u179a\u17c9\u17b6\u17a0\u17d2\u1782\u17b6\u1799", "BH": "\u1794\u17b6\u179a\u17c9\u17c2\u1793", "FR": "\u1794\u17b6\u179a\u17b6\u17c6\u1784", "BS": "\u1794\u17b6\u17a0\u17b6\u1798\u17c9\u17b6", "BM": "\u1794\u17ca\u17ba\u1798\u17bb\u1799\u178a\u17b6", "BW": "\u1794\u17bb\u178f\u179f\u17d2\u179c\u17b6\u178e\u17b6", "VA": "\u1794\u17bb\u179a\u17b8\u200b\u179c\u17c9\u17b6\u1791\u17b8\u1780\u1784\u17cb", "BG": "\u1794\u17ca\u17bb\u179b\u17a0\u17d2\u1782\u17b6\u179a\u17b8", "BT": "\u1794\u17ca\u17bc\u178f\u1784\u17cb", "BI": "\u1794\u17ca\u17bc\u179a\u17bb\u1793\u178c\u17b8", "PF": "\u1794\u17c9\u17bc\u179b\u17b8\u200b\u178e\u17c1\u179f\u17ca\u17b8\u200b\u1794\u17b6\u179a\u17b6\u17c6\u1784", "BO": "\u1794\u17bc\u179b\u17b8\u179c\u17b8", "BA": "\u1794\u17bc\u179f\u17d2\u1793\u17b8 \u1793\u17b7\u1784\u17a0\u17ba\u17a0\u17d2\u179f\u17b8\u17a0\u17d2\u1782\u17bc\u179c\u17b8\u178e\u17b6", "PL": "\u1794\u17c9\u17bc\u17a1\u17bc\u1789", "BF": "\u1794\u17bd\u1782\u17b8\u178e\u17b6\u17a0\u17d2\u179c\u17b6\u179f\u17bc", "BJ": "\u1794\u17c1\u178e\u17b6\u17c6\u1784", "PE": "\u1794\u17c9\u17c1\u179a\u17bc", "BZ": "\u1794\u17c1\u179b\u17b8", "BY": "\u1794\u17c1\u17a1\u17b6\u179a\u17bb\u179f", "BE": "\u1794\u17c2\u179b\u17a0\u17d2\u179f\u17ca\u17b7\u1780", "BR": "\u1794\u17d2\u179a\u17c1\u179f\u17ca\u17b8\u179b", "PW": "\u1795\u17c5\u17a1\u17bc", "PR": "\u1796\u17d0\u179a\u178f\u17bc\u179a\u17b8\u1780\u17bc", "PT": "\u1796\u17d0\u179a\u1791\u17bb\u1799\u17a0\u17d2\u1782\u17b6\u179b\u17cb", "BN": "\u1796\u17d2\u179a\u17bb\u1799\u178e\u17c1", "MO": "\u1798\u17c9\u17b6\u1780\u17b6\u179c \u178f\u17c6\u1794\u1793\u17cb\u179a\u178a\u17d2\u178b\u1794\u17b6\u179b\u1796\u17b7\u179f\u17c1\u179f\u1785\u17b7\u1793", "MG": "\u1798\u17c9\u17b6\u178a\u17b6\u17a0\u17d2\u1782\u17b6\u179f\u17d2\u1780\u17b6", "MQ": "\u1798\u17c9\u17b6\u1791\u17b8\u1793\u17b8\u1780", "YT": "\u1798\u17c9\u17b6\u1799\u17bb\u178f", "MA": "\u1798\u17c9\u17b6\u179a\u17c9\u17bb\u1780", "MV": "\u1798\u17c9\u17b6\u179b\u17cb\u178c\u17b8\u179c", "MT": "\u1798\u17c9\u17b6\u179b\u17cb\u178f\u17cd", "ML": "\u1798\u17c9\u17b6\u179b\u17b8", "MK": "\u1798\u17c9\u17b6\u179f\u17c1\u178a\u17d2\u179c\u17b6\u1793\u1781\u17b6\u1784\u1787\u17be\u1784", "MW": "\u1798\u17c9\u17b6\u17a1\u17b6\u179c\u17b8", "MY": "\u1798\u17c9\u17b6\u17a1\u17c1\u179f\u17ca\u17b8", "MX": "\u1798\u17c9\u17b7\u1780\u179f\u17ca\u17b7\u1780", "MM": "\u1798\u17b8\u1799\u17c9\u17b6\u1793\u17cb\u1798\u17c9\u17b6 (\u1797\u17bc\u1798\u17b6)", "ME": "\u1798\u17c9\u17bb\u1784\u178f\u17c1\u178e\u17c1\u17a0\u17d2\u1782\u17d2\u179a\u17c4", "MS": "\u1798\u17c9\u17bb\u1784\u179f\u17ca\u17c2\u179a\u17c9\u17b6", "MN": "\u1798\u17c9\u17bb\u1784\u17a0\u17d2\u1782\u17c4\u179b\u17b8", "MD": "\u1798\u17c9\u17bb\u179b\u178a\u17b6\u179c\u17b8", "MC": "\u1798\u17c9\u17bc\u178e\u17b6\u1780\u17bc", "MR": "\u1798\u17c9\u17bc\u179a\u17b8\u178f\u17b6\u1793\u17b8", "MU": "\u1798\u17c9\u17bc\u179a\u17b8\u179f", "MZ": "\u1798\u17c9\u17bc\u179f\u17c6\u1794\u17ca\u17b7\u1780", "YE": "\u1799\u17c1\u1798\u17c9\u17c2\u1793", "RW": "\u179a\u179c\u17c9\u17b6\u1793\u17cb\u178a\u17b6", "RU": "\u179a\u17bb\u179f\u17d2\u179f\u17ca\u17b8", "RO": "\u179a\u17bc\u1798\u17c9\u17b6\u1793\u17b8", "RE": "\u179a\u17c1\u17a2\u17bb\u1799\u1789\u17c9\u17bb\u1784", "LI": "\u179b\u17b7\u1785\u178f\u17b7\u1793\u179f\u17d2\u178a\u17b6\u1789", "LT": "\u179b\u17b8\u1791\u17bb\u1799\u17a2\u17b6\u1793\u17b8", "LB": "\u179b\u17b8\u1794\u1784\u17cb", "LY": "\u179b\u17b8\u1794\u17ca\u17b8", "LR": "\u179b\u17b8\u1794\u17c1\u179a\u17b8\u1799\u17c9\u17b6", "LU": "\u179b\u17bb\u1785\u179f\u17c6\u1794\u17bd", "VU": "\u179c\u17c9\u17b6\u1793\u17bc\u1791\u17bc", "WF": "\u179c\u17c9\u17b6\u179b\u17b8\u179f \u1793\u17b7\u1784\u200b\u17a0\u17d2\u179c\u17bc\u1791\u17bc\u178e\u17b6", "VN": "\u179c\u17c0\u178f\u178e\u17b6\u1798", "VE": "\u179c\u17c9\u17c1\u178e\u17c1\u179f\u17ca\u17bb\u1799\u17a2\u17c1\u17a1\u17b6", "PM": "\u179f\u1784\u17cb\u1796\u17d2\u1799\u17c2\u179a \u1793\u17b7\u1784\u200b\u1798\u17b8\u1782\u17b8\u17a1\u17bb\u1784", "SH": "\u179f\u1784\u17cb\u200b\u17a0\u17c1\u17a1\u17c1\u178e\u17b6", "US": "\u179f\u17a0\u179a\u178a\u17d2\u178b\u17a2\u17b6\u1798\u17c1\u179a\u17b7\u1780", "DO": "\u179f\u17b6\u1792\u17b6\u179a\u178e\u179a\u178a\u17d2\u178b\u200b\u178a\u17bc\u1798\u17b8\u1793\u17b8\u1780", "CF": "\u179f\u17b6\u1792\u17b6\u179a\u178e\u179a\u178a\u17d2\u178b\u17a2\u17b6\u17a0\u17d2\u179c\u17d2\u179a\u17b7\u1780\u1780\u178e\u17d2\u178a\u17b6\u179b", "SM": "\u179f\u17b6\u1793\u200b\u1798\u17c9\u17b6\u179a\u17b8\u178e\u17bc", "WS": "\u179f\u17b6\u1798\u17d0\u179a", "AS": "\u179f\u17b6\u1798\u17d0\u179a \u17a2\u17b6\u1798\u17c1\u179a\u17b7\u1780\u17b6\u17c6\u1784", "EH": "\u179f\u17b6\u17a0\u17b6\u179a\u17c9\u17b6\u1781\u17b6\u1784\u179b\u17b7\u1785", "SG": "\u179f\u17b7\u1784\u17d2\u17a0\u1794\u17bb\u179a\u17b8", "SX": "\u179f\u17b8\u1784\u200b\u1798\u17c9\u17b6\u1792\u17b8\u1793", "CY": "\u179f\u17ca\u17b8\u1794", "ZW": "\u179f\u17ca\u17b8\u1798\u1794\u17b6\u179c\u17c9\u17c1", "SY": "\u179f\u17ca\u17b8\u179a\u17b8", "CL": "\u179f\u17ca\u17b8\u179b\u17b8", "SC": "\u179f\u17b8\u179f\u17d2\u17a0\u17c2\u179b", "SE": "\u179f\u17ca\u17bb\u1799\u17a2\u17c2\u178f", "SD": "\u179f\u17ca\u17bc\u178a\u1784\u17cb", "SS": "\u179f\u17ca\u17bc\u178a\u1784\u17cb\u200b\u1781\u17b6\u1784\u200b\u178f\u17d2\u1794\u17bc\u1784", "SO": "\u179f\u17bc\u1798\u17c9\u17b6\u179b\u17b8", "SR": "\u179f\u17bc\u179a\u17b8\u178e\u17b6\u1798", "SL": "\u179f\u17c0\u179a\u17c9\u17b6\u17a1\u17c1\u17a2\u17bc\u1793", "SN": "\u179f\u17c1\u178e\u17c1\u17a0\u17d2\u1782\u17b6\u179b\u17cb", "RS": "\u179f\u17c2\u1794\u17ca\u17b8", "ST": "\u179f\u17c5\u178f\u17bc\u1798\u17c9\u17c1 \u1793\u17b7\u1784 \u1794\u17d2\u179a\u17b6\u17c6\u1784\u179f\u17ca\u17b8\u1794", "ZM": "\u179f\u17c6\u1794\u17ca\u17b8", "KN": "\u179f\u17b6\u17c6\u1784\u200b\u1782\u17b8\u178f \u1793\u17b7\u1784 \u178e\u17c1\u179c\u17b8\u179f", "BL": "\u179f\u17b6\u17c6\u1784\u200b\u1794\u17b6\u1790\u17c1\u17a1\u17c1\u1798\u17b8", "MF": "\u179f\u17b6\u17c6\u1784\u200b\u1798\u17c9\u17b6\u1791\u17b8\u1793", "LC": "\u179f\u17b6\u17c6\u1784\u179b\u17bc\u179f\u17ca\u17b8", "VC": "\u179f\u17b6\u17c6\u1784\u200b\u179c\u17c9\u17b6\u17c6\u1784\u179f\u1784\u17cb \u1793\u17b7\u1784 \u17a0\u17d2\u1782\u17d2\u179a\u17c1\u178e\u17b6\u178c\u17b8\u1793", "LK": "\u179f\u17d2\u179a\u17b8\u179b\u1784\u17d2\u1780\u17b6", "SK": "\u179f\u17d2\u179b\u17bc\u179c\u17c9\u17b6\u1782\u17b8", "SI": "\u179f\u17d2\u179b\u17bc\u179c\u17c1\u1793\u17b8", "SJ": "\u179f\u17d2\u179c\u17b6\u179b\u1794\u17b6\u178a \u1793\u17b7\u1784 \u17a0\u17d2\u179f\u1784\u17cb\u1798\u17c9\u17b6\u1799\u17c1\u1793", "SZ": "\u179f\u17d2\u179c\u17b6\u179f\u17ca\u17b8\u17a1\u1784\u17cb", "CH": "\u179f\u17d2\u179c\u17b8\u179f", "HK": "\u17a0\u17bb\u1784\u1780\u17bb\u1784", "HU": "\u17a0\u17bb\u1784\u1782\u17d2\u179a\u17b8", "HN": "\u17a0\u17bb\u1784\u178c\u17bc\u179a\u17c9\u17b6\u179f", "NL": "\u17a0\u17bc\u17a1\u1784\u17cb", "BQ": "\u17a0\u17bc\u17a1\u1784\u17cb \u1780\u17b6\u179a\u17c9\u17b6\u1794\u17ca\u17b8\u1793", "HT": "\u17a0\u17c3\u1791\u17b8", "GH": "\u17a0\u17d2\u1782\u17b6\u178e\u17b6", "GA": "\u17a0\u17d2\u1782\u17b6\u1794\u17bb\u1784", "GN": "\u17a0\u17d2\u1782\u17b8\u178e\u17c1", "GW": "\u17a0\u17d2\u1782\u17b8\u178e\u17c1\u1794\u17ca\u17b8\u179f\u17d2\u179f\u17bc", "GQ": "\u17a0\u17d2\u1782\u17b8\u178e\u17c1\u17a2\u17c1\u1780\u17d2\u179c\u17b6\u1791\u17d0\u179a", "GY": "\u17a0\u17d2\u1782\u17b8\u1799\u17c9\u17b6\u1793", "GF": "\u17a0\u17d2\u1782\u17b8\u17a2\u17b6\u178e\u17b6 \u1794\u17b6\u179a\u17b6\u17c6\u1784", "GG": "\u17a0\u17d2\u1782\u17c1\u1793\u179f\u17ca\u17b8", "GP": "\u17a0\u17d2\u1782\u17c4\u178a\u17ba\u17a1\u17bb\u1794", "GM": "\u17a0\u17d2\u1782\u17c6\u1794\u17ca\u17b8", "GU": "\u17a0\u17d2\u1782\u17b6\u17c6", "GD": "\u17a0\u17d2\u1782\u17d2\u179a\u17be\u178e\u17b6\u178a", "GL": "\u17a0\u17d2\u1782\u17d2\u179a\u17c4\u17a2\u1784\u17cb\u17a1\u1784\u17cb", "FJ": "\u17a0\u17d2\u179c\u17b8\u1787\u17b8", "PH": "\u17a0\u17d2\u179c\u17b8\u179b\u17b8\u1796\u17b8\u1793", "FI": "\u17a0\u17d2\u179c\u17b6\u17c6\u1784\u17a1\u1784\u17cb", "JO": "\u17a0\u17ca\u17d2\u179f\u1780\u178a\u17b6\u1793\u17b8", "GE": "\u17a0\u17d2\u179f\u1780\u17a0\u17d2\u179f\u17ca\u17b8", "JM": "\u17a0\u17d2\u179f\u17b6\u1798\u17c9\u17b6\u17a2\u17ca\u17b8\u1780", "GI": "\u17a0\u17d2\u179f\u17ca\u17b8\u1794\u17d2\u179a\u17b6\u179b\u17cb\u178f\u17b6", "LA": "\u17a1\u17b6\u179c", "LV": "\u17a1\u17c1\u178f\u17bc\u1793\u17b8", "LS": "\u17a1\u17c1\u179f\u17bc\u178f\u17bc", "AD": "\u17a2\u1784\u17cb\u178a\u17bc\u179a\u17c9\u17b6", "AQ": "\u17a2\u1784\u17cb\u178f\u17b6\u1780\u17cb\u1791\u17b7\u1780", "AG": "\u17a2\u1784\u17cb\u1791\u17b8\u17a0\u17d2\u1782\u17b6 \u1793\u17b7\u1784 \u1794\u17b6\u1794\u17ca\u17bb\u1799\u178a\u17b6", "AI": "\u17a2\u1784\u17cb\u17a0\u17d2\u1782\u17b8\u17a1\u17b6", "AO": "\u17a2\u1784\u17cb\u17a0\u17d2\u1782\u17c4\u17a1\u17b6", "AM": "\u17a2\u17b6\u1798\u17c1\u1793\u17b8", "SA": "\u17a2\u17b6\u179a\u17c9\u17b6\u1794\u17ca\u17b8\u179f\u17b6\u17a2\u17bc\u178c\u17b8\u178f", "AW": "\u17a2\u17b6\u179a\u17bc\u1794\u17b6", "AL": "\u17a2\u17b6\u179b\u17cb\u1794\u17b6\u1793\u17b8", "DZ": "\u17a2\u17b6\u179b\u17cb\u17a0\u17d2\u179f\u17c1\u179a\u17b8", "DE": "\u17a2\u17b6\u179b\u17d2\u179b\u17ba\u1798\u17c9\u1784\u17cb", "AZ": "\u17a2\u17b6\u179f\u17ca\u17c2\u1794\u17c3\u17a0\u17d2\u179f\u1784\u17cb", "AF": "\u17a2\u17b6\u17a0\u17d2\u179c\u17a0\u17d2\u1782\u17b6\u1793\u17b8\u179f\u17d2\u1790\u17b6\u1793", "ZA": "\u17a2\u17b6\u17a0\u17d2\u179c\u17d2\u179a\u17b7\u1780\u1781\u17b6\u1784\u178f\u17d2\u1794\u17bc\u1784", "AR": "\u17a2\u17b6\u17a0\u17d2\u179f\u1784\u17cb\u1791\u17b8\u1793", "IN": "\u17a5\u178e\u17d2\u178c\u17b6", "ID": "\u17a5\u178e\u17d2\u178c\u17bc\u178e\u17c1\u179f\u17ca\u17b8", "IT": "\u17a2\u17ca\u17b8\u178f\u17b6\u179b\u17b8", "IR": "\u17a2\u17ca\u17b8\u179a\u17c9\u1784\u17cb", "IQ": "\u17a2\u17ca\u17b8\u179a\u17c9\u17b6\u1780\u17cb", "IL": "\u17a2\u17ca\u17b8\u179f\u17d2\u179a\u17b6\u17a2\u17c2\u179b", "IS": "\u17a2\u17ca\u17b8\u179f\u17d2\u179b\u1784\u17cb", "UA": "\u17a2\u17ca\u17bb\u1799\u1780\u17d2\u179a\u17c2\u1793", "UY": "\u17a2\u17ca\u17bb\u1799\u179a\u17bc\u17a0\u17d2\u1782\u17b6\u1799", "AT": "\u17a2\u17bc\u1791\u17d2\u179a\u17b8\u179f", "OM": "\u17a2\u17bc\u1798\u17c9\u1784\u17cb", "UZ": "\u17a2\u17ca\u17bc\u179f\u1794\u17c1\u1782\u17b8\u179f\u17d2\u1790\u17b6\u1793", "AU": "\u17a2\u17bc\u179f\u17d2\u178f\u17d2\u179a\u17b6\u179b\u17b8", "UG": "\u17a2\u17ca\u17bc\u17a0\u17d2\u1782\u1784\u17cb\u178a\u17b6", "IE": "\u17a2\u17c0\u179a\u17a1\u1784\u17cb", "EC": "\u17a2\u17c1\u1780\u17d2\u179c\u17b6\u1791\u17d0\u179a", "ET": "\u17a2\u17c1\u178f\u17d2\u1799\u17bc\u1796\u17b8", "AE": "\u17a2\u17c1\u1798\u17b8\u179a\u17c9\u17b6\u178f\u200b\u17a2\u17b6\u179a\u17c9\u17b6\u1794\u17cb\u200b\u179a\u17bd\u1798", "ER": "\u17a2\u17c1\u179a\u17b8\u178f\u17d2\u179a\u17c1", "EE": "\u17a2\u17c1\u179f\u17d2\u178f\u17bc\u1793\u17b8", "ES": "\u17a2\u17c1\u179f\u17d2\u1794\u17c9\u17b6\u1789", "EG": "\u17a2\u17c1\u17a0\u17d2\u179f\u17ca\u17b8\u1794", "SV": "\u17a2\u17c2\u179b\u179f\u17b6\u179b\u17cb\u179c\u17c9\u17b6\u178c\u17d0\u179a", "IM": "\u17a2\u17c2\u179b\u17a2\u17bb\u17a0\u17d2\u179c\u1798\u17c2\u1793"}onionshare-2.6.3/desktop/onionshare/resources/countries/lt.json000066400000000000000000000125421475545702100250620ustar00rootroot00000000000000{"AF": "Afganistanas", "IE": "Airija", "AX": "Aland\u0173 Salos", "AL": "Albanija", "DZ": "Al\u017eyras", "AS": "Amerikos Samoa", "AD": "Andora", "AI": "Angilija", "AO": "Angola", "AQ": "Antarktida", "AG": "Antigva ir Barbuda", "AR": "Argentina", "AM": "Arm\u0117nija", "AW": "Aruba", "AU": "Australija", "AT": "Austrija", "AZ": "Azerbaid\u017eanas", "BS": "Bahamos", "BH": "Bahreinas", "BY": "Baltarusija", "BD": "Banglade\u0161as", "BB": "Barbadosas", "BE": "Belgija", "BZ": "Belizas", "BJ": "Beninas", "BM": "Bermuda", "GW": "Bisau Gvin\u0117ja", "BO": "Bolivija", "BA": "Bosnija ir Hercegovina", "BW": "Botsvana", "BR": "Brazilija", "BN": "Brun\u0117jus", "BG": "Bulgarija", "BF": "Burkina Fasas", "BI": "Burundis", "BT": "Butanas", "BV": "Buv\u0117 Sala", "CF": "Centrin\u0117s Afrikos Respublika", "TD": "\u010cadas", "CZ": "\u010cekija", "CL": "\u010cil\u0117", "DK": "Danija", "VG": "Did\u017eiosios Britanijos Mergeli\u0173 Salos", "DM": "Dominika", "DO": "Dominikos Respublika", "CI": "Dramblio Kaulo Krantas", "DJ": "D\u017eibutis", "EG": "Egiptas", "EC": "Ekvadoras", "ER": "Eritr\u0117ja", "EE": "Estija", "ET": "Etiopija", "FO": "Farer\u0173 Salos", "FJ": "Fid\u017eis", "PH": "Filipinai", "FK": "Folklando Salos", "GA": "Gabonas", "GY": "Gajana", "GM": "Gambija", "GH": "Gana", "GG": "Gernsis", "GI": "Gibraltaras", "GR": "Graikija", "GD": "Grenada", "GL": "Grenlandija", "GE": "Gruzija", "GU": "Guamas", "GP": "Gvadelupa", "GT": "Gvatemala", "GN": "Gvin\u0117ja", "HT": "Haitis", "HM": "Herdo ir Makdonaldo Salos", "HN": "Hond\u016bras", "IN": "Indija", "IO": "Indijos Vandenyno Brit\u0173 Sritis", "ID": "Indonezija", "HK": "Ypatingasis Administracinis Kinijos Regionas Honkongas", "MO": "Ypatingasis Administracinis Kinijos Regionas Makao", "IQ": "Irakas", "IR": "Iranas", "IS": "Islandija", "ES": "Ispanija", "IT": "Italija", "IL": "Izraelis", "JM": "Jamaika", "JP": "Japonija", "YE": "Jemenas", "JO": "Jordanija", "GB": "Jungtin\u0117 Karalyst\u0117", "US": "Jungtin\u0117s Valstijos", "AE": "Jungtiniai Arab\u0173 Emyratai", "VI": "Jungtini\u0173 Valstij\u0173 Mergeli\u0173 Salos", "ME": "Juodkalnija", "KY": "Kaiman\u0173 Salos", "CX": "Kal\u0117d\u0173 Sala", "KH": "Kambod\u017ea", "CM": "Kamer\u016bnas", "CA": "Kanada", "BQ": "Karib\u0173 Nyderlandai", "QA": "Kataras", "KZ": "Kazachstanas", "KE": "Kenija", "CN": "Kinija", "CY": "Kipras", "KG": "Kirgizija", "KI": "Kiribatis", "CW": "Kiurasao", "CC": "Kokos\u0173 (Kilingo) Salos", "CO": "Kolumbija", "KM": "Komorai", "CG": "Kongas-Brazavilis", "CD": "Kongas-Kin\u0161asa", "CR": "Kosta Rika", "HR": "Kroatija", "CU": "Kuba", "CK": "Kuko Salos", "KW": "Kuveitas", "LA": "Laosas", "LV": "Latvija", "PL": "Lenkija", "LS": "Lesotas", "LB": "Libanas", "LR": "Liberija", "LY": "Libija", "LI": "Lichten\u0161teinas", "LT": "Lietuva", "LU": "Liuksemburgas", "MG": "Madagaskaras", "YT": "Majotas", "MY": "Malaizija", "MW": "Malavis", "MV": "Maldyvai", "ML": "Malis", "MT": "Malta", "MA": "Marokas", "MQ": "Martinika", "MU": "Mauricijus", "MR": "Mauritanija", "MX": "Meksika", "IM": "Meno Sala", "MM": "Mianmaras (Birma)", "MD": "Moldova", "MC": "Monakas", "MN": "Mongolija", "MS": "Montseratas", "MZ": "Mozambikas", "NA": "Namibija", "NC": "Naujoji Kaledonija", "NZ": "Naujoji Zelandija", "NR": "Nauru", "NP": "Nepalas", "NL": "Nyderlandai", "NG": "Nigerija", "NE": "Nigeris", "NI": "Nikaragva", "NU": "Niuj\u0117", "NF": "Norfolko sala", "NO": "Norvegija", "OM": "Omanas", "PK": "Pakistanas", "PW": "Palau", "PA": "Panama", "PG": "Papua Naujoji Gvin\u0117ja", "PY": "Paragvajus", "PE": "Peru", "ZA": "Piet\u0173 Afrika", "GS": "Piet\u0173 D\u017eord\u017eija ir Piet\u0173 Sandvi\u010do salos", "KR": "Piet\u0173 Kor\u0117ja", "SS": "Piet\u0173 Sudanas", "PN": "Pitkerno salos", "PT": "Portugalija", "FR": "Pranc\u016bzija", "GF": "Pranc\u016bzijos Gviana", "TF": "Pranc\u016bzijos Piet\u0173 sritys", "PF": "Pranc\u016bzijos Polinezija", "PR": "Puerto Rikas", "GQ": "Pusiaujo Gvin\u0117ja", "RE": "Reunjonas", "TL": "Ryt\u0173 Timoras", "RW": "Ruanda", "RO": "Rumunija", "RU": "Rusija", "SB": "Saliamono Salos", "SV": "Salvadoras", "WS": "Samoa", "SM": "San Marinas", "ST": "San Tom\u0117 ir Prinsip\u0117", "SA": "Saudo Arabija", "SC": "Sei\u0161eliai", "BL": "Sen Bartelemi", "MF": "Sen Martenas", "PM": "Sen Pjeras ir Mikelonas", "SN": "Senegalas", "KN": "Sent Kitsas ir Nevis", "LC": "Sent Lusija", "RS": "Serbija", "SL": "Siera Leon\u0117", "SG": "Singap\u016bras", "SX": "Sint Martenas", "SY": "Sirija", "SK": "Slovakija", "SI": "Slov\u0117nija", "SO": "Somalis", "SD": "Sudanas", "FI": "Suomija", "SR": "Surinamas", "SJ": "Svalbardas ir Janas Majenas", "SZ": "Svazilandas", "KP": "\u0160iaur\u0117s Kor\u0117ja", "MK": "\u0160iaur\u0117s Makedonija", "LK": "\u0160ri Lanka", "SH": "\u0160v. Elenos Sala", "SE": "\u0160vedija", "CH": "\u0160veicarija", "VC": "\u0160ventasis Vincentas ir Grenadinai", "TJ": "Tad\u017eikija", "TH": "Tailandas", "TW": "Taivanas", "TZ": "Tanzanija", "TC": "Terkso ir Kaikoso Salos", "TG": "Togas", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidadas ir Tobagas", "TN": "Tunisas", "TR": "Turkija", "TM": "Turkm\u0117nistanas", "UG": "Uganda", "UA": "Ukraina", "UY": "Urugvajus", "UZ": "Uzbekistanas", "EH": "Vakar\u0173 Sachara", "VU": "Vanuatu", "VA": "Vatikano Miesto Valstyb\u0117", "VE": "Venesuela", "HU": "Vengrija", "VN": "Vietnamas", "DE": "Vokietija", "WF": "Volisas ir Fut\u016bna", "ZM": "Zambija", "ZW": "Zimbabv\u0117", "CV": "\u017daliasis Ky\u0161ulys"}onionshare-2.6.3/desktop/onionshare/resources/countries/nb_NO.json000066400000000000000000000113621475545702100254350ustar00rootroot00000000000000{"AF": "Afghanistan", "AL": "Albania", "DZ": "Algerie", "AS": "Amerikansk Samoa", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktis", "AG": "Antigua og Barbuda", "AR": "Argentina", "AM": "Armenia", "AW": "Aruba", "AZ": "Aserbajdsjan", "AU": "Australia", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BE": "Belgia", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnia-Hercegovina", "BW": "Botswana", "BV": "Bouvet\u00f8ya", "BR": "Brasil", "BN": "Brunei", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "CA": "Canada", "KY": "Cayman\u00f8yene", "CL": "Chile", "CX": "Christmas\u00f8ya", "CO": "Colombia", "CK": "Cook\u00f8yene", "CR": "Costa Rica", "CU": "Cuba", "CW": "Cura\u00e7ao", "DK": "Danmark", "VI": "De amerikanske jomfru\u00f8yene", "VG": "De britiske jomfru\u00f8yene", "AE": "De forente arabiske emirater", "TF": "De franske s\u00f8rterritorier", "DO": "Den dominikanske republikk", "CF": "Den sentralafrikanske republikk", "IO": "Det britiske territoriet i Indiahavet", "DJ": "Djibouti", "DM": "Dominica", "EC": "Ecuador", "EG": "Egypt", "GQ": "Ekvatorial-Guinea", "SV": "El Salvador", "CI": "Elfenbenskysten", "ER": "Eritrea", "EE": "Estland", "SZ": "Eswatini", "ET": "Etiopia", "FK": "Falklands\u00f8yene", "FJ": "Fiji", "PH": "Filippinene", "FI": "Finland", "FR": "Frankrike", "GF": "Fransk Guyana", "PF": "Fransk Polynesia", "FO": "F\u00e6r\u00f8yene", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "GH": "Ghana", "GI": "Gibraltar", "GD": "Grenada", "GL": "Gr\u00f8nland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard- og McDonald\u00f8yene", "GR": "Hellas", "HN": "Honduras", "HK": "Hongkong S.A.R. Kina", "BY": "Hviterussland", "IN": "India", "ID": "Indonesia", "IQ": "Irak", "IR": "Iran", "IE": "Irland", "IS": "Island", "IL": "Israel", "IT": "Italia", "JM": "Jamaica", "JP": "Japan", "YE": "Jemen", "JO": "Jordan", "KH": "Kambodsja", "CM": "Kamerun", "CV": "Kapp Verde", "BQ": "Karibisk Nederland", "KZ": "Kasakhstan", "KE": "Kenya", "CN": "Kina", "KG": "Kirgisistan", "KI": "Kiribati", "CC": "Kokos\u00f8yene", "KM": "Komorene", "CG": "Kongo-Brazzaville", "CD": "Kongo-Kinshasa", "HR": "Kroatia", "KW": "Kuwait", "CY": "Kypros", "LA": "Laos", "LV": "Latvia", "LS": "Lesotho", "LB": "Libanon", "LR": "Liberia", "LY": "Libya", "LI": "Liechtenstein", "LT": "Litauen", "LU": "Luxemburg", "MO": "Macao S.A.R. Kina", "MG": "Madagaskar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldivene", "ML": "Mali", "MT": "Malta", "IM": "Man", "MA": "Marokko", "MQ": "Martinique", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexico", "MD": "Moldova", "MC": "Monaco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mosambik", "MM": "Myanmar (Burma)", "NA": "Namibia", "NR": "Nauru", "NL": "Nederland", "NP": "Nepal", "NZ": "New Zealand", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "KP": "Nord-Korea", "MK": "Nord-Makedonia", "NF": "Norfolk\u00f8ya", "NO": "Norge", "NC": "Ny-Caledonia", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua Ny-Guinea", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairn\u00f8yene", "PL": "Polen", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "RE": "R\u00e9union", "RO": "Romania", "RU": "Russland", "RW": "Rwanda", "KN": "Saint Kitts og Nevis", "BL": "Saint-Barth\u00e9lemy", "MF": "Saint-Martin", "PM": "Saint-Pierre-et-Miquelon", "SB": "Salomon\u00f8yene", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 og Pr\u00edncipe", "SA": "Saudi-Arabia", "SN": "Senegal", "RS": "Serbia", "SC": "Seychellene", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakia", "SI": "Slovenia", "SO": "Somalia", "ES": "Spania", "LK": "Sri Lanka", "SH": "St. Helena", "LC": "St. Lucia", "VC": "St. Vincent og Grenadinene", "GB": "Storbritannia", "SD": "Sudan", "SR": "Surinam", "SJ": "Svalbard og Jan Mayen", "CH": "Sveits", "SE": "Sverige", "SY": "Syria", "ZA": "S\u00f8r-Afrika", "GS": "S\u00f8r-Georgia og S\u00f8r-Sandwich\u00f8yene", "KR": "S\u00f8r-Korea", "SS": "S\u00f8r-Sudan", "TJ": "Tadsjikistan", "TW": "Taiwan", "TZ": "Tanzania", "TH": "Thailand", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad og Tobago", "TD": "Tsjad", "CZ": "Tsjekkia", "TN": "Tunisia", "TM": "Turkmenistan", "TC": "Turks- og Caicos\u00f8yene", "TR": "Tyrkia", "DE": "Tyskland", "UG": "Uganda", "UA": "Ukraina", "HU": "Ungarn", "UY": "Uruguay", "US": "USA", "UZ": "Usbekistan", "VU": "Vanuatu", "VA": "Vatikanstaten", "VE": "Venezuela", "EH": "Vest-Sahara", "VN": "Vietnam", "WF": "Wallis og Futuna", "ZM": "Zambia", "ZW": "Zimbabwe", "TL": "\u00d8st-Timor", "AT": "\u00d8sterrike", "AX": "\u00c5land"}onionshare-2.6.3/desktop/onionshare/resources/countries/pl.json000066400000000000000000000116721475545702100250610ustar00rootroot00000000000000{"AF": "Afganistan", "AL": "Albania", "DZ": "Algieria", "AD": "Andora", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktyda", "AG": "Antigua i Barbuda", "SA": "Arabia Saudyjska", "AR": "Argentyna", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "AZ": "Azerbejd\u017can", "BS": "Bahamy", "BH": "Bahrajn", "BD": "Bangladesz", "BB": "Barbados", "BE": "Belgia", "BZ": "Belize", "BJ": "Benin", "BM": "Bermudy", "BT": "Bhutan", "BY": "Bia\u0142oru\u015b", "BO": "Boliwia", "BA": "Bo\u015bnia i Hercegowina", "BW": "Botswana", "BR": "Brazylia", "BN": "Brunei", "IO": "Brytyjskie Terytorium Oceanu Indyjskiego", "VG": "Brytyjskie Wyspy Dziewicze", "BG": "Bu\u0142garia", "BF": "Burkina Faso", "BI": "Burundi", "CL": "Chile", "CN": "Chiny", "HR": "Chorwacja", "CI": "C\u00f4te d\u2019Ivoire", "CW": "Cura\u00e7ao", "CY": "Cypr", "TD": "Czad", "ME": "Czarnog\u00f3ra", "CZ": "Czechy", "DK": "Dania", "CD": "Demokratyczna Republika Konga", "DM": "Dominika", "DO": "Dominikana", "DJ": "D\u017cibuti", "EG": "Egipt", "EC": "Ekwador", "ER": "Erytrea", "EE": "Estonia", "SZ": "Eswatini", "ET": "Etiopia", "FK": "Falklandy", "FJ": "Fid\u017ci", "PH": "Filipiny", "FI": "Finlandia", "FR": "Francja", "TF": "Francuskie Terytoria Po\u0142udniowe i Antarktyczne", "GA": "Gabon", "GM": "Gambia", "GS": "Georgia Po\u0142udniowa i Sandwich Po\u0142udniowy", "GH": "Ghana", "GI": "Gibraltar", "GR": "Grecja", "GD": "Grenada", "GL": "Grenlandia", "GE": "Gruzja", "GU": "Guam", "GG": "Guernsey", "GY": "Gujana", "GF": "Gujana Francuska", "GP": "Gwadelupa", "GT": "Gwatemala", "GN": "Gwinea", "GW": "Gwinea Bissau", "GQ": "Gwinea R\u00f3wnikowa", "HT": "Haiti", "ES": "Hiszpania", "NL": "Holandia", "HN": "Honduras", "IN": "Indie", "ID": "Indonezja", "IQ": "Irak", "IR": "Iran", "IE": "Irlandia", "IS": "Islandia", "IL": "Izrael", "JM": "Jamajka", "JP": "Japonia", "YE": "Jemen", "JO": "Jordania", "KY": "Kajmany", "KH": "Kambod\u017ca", "CM": "Kamerun", "CA": "Kanada", "QA": "Katar", "KZ": "Kazachstan", "KE": "Kenia", "KG": "Kirgistan", "KI": "Kiribati", "CO": "Kolumbia", "KM": "Komory", "CG": "Kongo", "KR": "Korea Po\u0142udniowa", "KP": "Korea P\u00f3\u0142nocna", "CR": "Kostaryka", "CU": "Kuba", "KW": "Kuwejt", "LA": "Laos", "LS": "Lesotho", "LB": "Liban", "LR": "Liberia", "LY": "Libia", "LI": "Liechtenstein", "LT": "Litwa", "LU": "Luksemburg", "LV": "\u0141otwa", "MK": "Macedonia P\u00f3\u0142nocna", "MG": "Madagaskar", "YT": "Majotta", "MW": "Malawi", "MV": "Malediwy", "MY": "Malezja", "ML": "Mali", "MT": "Malta", "MA": "Maroko", "MQ": "Martynika", "MR": "Mauretania", "MU": "Mauritius", "MX": "Meksyk", "MM": "Mjanma (Birma)", "MD": "Mo\u0142dawia", "MC": "Monako", "MN": "Mongolia", "MS": "Montserrat", "MZ": "Mozambik", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "BQ": "Niderlandy Karaibskie", "DE": "Niemcy", "NE": "Niger", "NG": "Nigeria", "NI": "Nikaragua", "NU": "Niue", "NF": "Norfolk", "NO": "Norwegia", "NC": "Nowa Kaledonia", "NZ": "Nowa Zelandia", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua-Nowa Gwinea", "PY": "Paragwaj", "PE": "Peru", "PN": "Pitcairn", "PF": "Polinezja Francuska", "PL": "Polska", "PR": "Portoryko", "PT": "Portugalia", "ZA": "Republika Po\u0142udniowej Afryki", "CF": "Republika \u015arodkowoafryka\u0144ska", "CV": "Republika Zielonego Przyl\u0105dka", "RE": "Reunion", "RU": "Rosja", "RO": "Rumunia", "RW": "Rwanda", "EH": "Sahara Zachodnia", "KN": "Saint Kitts i Nevis", "LC": "Saint Lucia", "VC": "Saint Vincent i Grenadyny", "BL": "Saint-Barth\u00e9lemy", "MF": "Saint-Martin", "PM": "Saint-Pierre i Miquelon", "SV": "Salwador", "WS": "Samoa", "AS": "Samoa Ameryka\u0144skie", "SM": "San Marino", "SN": "Senegal", "RS": "Serbia", "SC": "Seszele", "SL": "Sierra Leone", "SG": "Singapur", "SX": "Sint Maarten", "SK": "S\u0142owacja", "SI": "S\u0142owenia", "SO": "Somalia", "HK": "SRA Hongkong (Chiny)", "MO": "SRA Makau (Chiny)", "LK": "Sri Lanka", "US": "Stany Zjednoczone", "SD": "Sudan", "SS": "Sudan Po\u0142udniowy", "SR": "Surinam", "SJ": "Svalbard i Jan Mayen", "SY": "Syria", "CH": "Szwajcaria", "SE": "Szwecja", "TJ": "Tad\u017cykistan", "TH": "Tajlandia", "TW": "Tajwan", "TZ": "Tanzania", "TL": "Timor Wschodni", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trynidad i Tobago", "TN": "Tunezja", "TR": "Turcja", "TM": "Turkmenistan", "TC": "Turks i Caicos", "UG": "Uganda", "UA": "Ukraina", "UY": "Urugwaj", "UZ": "Uzbekistan", "VU": "Vanuatu", "WF": "Wallis i Futuna", "VA": "Watykan", "VE": "Wenezuela", "HU": "W\u0119gry", "GB": "Wielka Brytania", "VN": "Wietnam", "IT": "W\u0142ochy", "BV": "Wyspa Bouveta", "CX": "Wyspa Bo\u017cego Narodzenia", "IM": "Wyspa Man", "SH": "Wyspa \u015awi\u0119tej Heleny", "AX": "Wyspy Alandzkie", "CK": "Wyspy Cooka", "VI": "Wyspy Dziewicze Stan\u00f3w Zjednoczonych", "HM": "Wyspy Heard i McDonalda", "CC": "Wyspy Kokosowe", "FO": "Wyspy Owcze", "SB": "Wyspy Salomona", "ST": "Wyspy \u015awi\u0119tego Tomasza i Ksi\u0105\u017c\u0119ca", "ZM": "Zambia", "ZW": "Zimbabwe", "AE": "Zjednoczone Emiraty Arabskie"}onionshare-2.6.3/desktop/onionshare/resources/countries/pt_BR.json000066400000000000000000000124251475545702100254510ustar00rootroot00000000000000{"AF": "Afeganist\u00e3o", "ZA": "\u00c1frica do Sul", "AL": "Alb\u00e2nia", "DE": "Alemanha", "AD": "Andorra", "AO": "Angola", "AI": "Anguila", "AQ": "Ant\u00e1rtida", "AG": "Ant\u00edgua e Barbuda", "SA": "Ar\u00e1bia Saudita", "DZ": "Arg\u00e9lia", "AR": "Argentina", "AM": "Arm\u00eania", "AW": "Aruba", "AU": "Austr\u00e1lia", "AT": "\u00c1ustria", "AZ": "Azerbaij\u00e3o", "BS": "Bahamas", "BH": "Bahrein", "BD": "Bangladesh", "BB": "Barbados", "BE": "B\u00e9lgica", "BZ": "Belize", "BJ": "Benin", "BM": "Bermudas", "BY": "Bielorr\u00fassia", "BO": "Bol\u00edvia", "BA": "B\u00f3snia e Herzegovina", "BW": "Botsuana", "BR": "Brasil", "BN": "Brunei", "BG": "Bulg\u00e1ria", "BF": "Burquina Faso", "BI": "Burundi", "BT": "But\u00e3o", "CV": "Cabo Verde", "CM": "Camar\u00f5es", "KH": "Camboja", "CA": "Canad\u00e1", "QA": "Catar", "KZ": "Cazaquist\u00e3o", "TD": "Chade", "CL": "Chile", "CN": "China", "CY": "Chipre", "VA": "Cidade do Vaticano", "CO": "Col\u00f4mbia", "KM": "Comores", "CD": "Congo - Kinshasa", "KP": "Coreia do Norte", "KR": "Coreia do Sul", "CI": "Costa do Marfim", "CR": "Costa Rica", "HR": "Cro\u00e1cia", "CU": "Cuba", "CW": "Cura\u00e7ao", "DK": "Dinamarca", "DJ": "Djibuti", "DM": "Dominica", "EG": "Egito", "SV": "El Salvador", "AE": "Emirados \u00c1rabes Unidos", "EC": "Equador", "ER": "Eritreia", "SK": "Eslov\u00e1quia", "SI": "Eslov\u00eania", "ES": "Espanha", "SZ": "Essuat\u00edni", "US": "Estados Unidos", "EE": "Est\u00f4nia", "ET": "Eti\u00f3pia", "FJ": "Fiji", "PH": "Filipinas", "FI": "Finl\u00e2ndia", "FR": "Fran\u00e7a", "GA": "Gab\u00e3o", "GM": "G\u00e2mbia", "GH": "Gana", "GE": "Ge\u00f3rgia", "GI": "Gibraltar", "GD": "Granada", "GR": "Gr\u00e9cia", "GL": "Groenl\u00e2ndia", "GP": "Guadalupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GY": "Guiana", "GF": "Guiana Francesa", "GN": "Guin\u00e9", "GQ": "Guin\u00e9 Equatorial", "GW": "Guin\u00e9-Bissau", "HT": "Haiti", "HN": "Honduras", "HK": "Hong Kong, RAE da China", "HU": "Hungria", "YE": "I\u00eamen", "BV": "Ilha Bouvet", "CX": "Ilha Christmas", "IM": "Ilha de Man", "NF": "Ilha Norfolk", "AX": "Ilhas Aland", "KY": "Ilhas Cayman", "CC": "Ilhas Cocos (Keeling)", "CK": "Ilhas Cook", "FO": "Ilhas Faroe", "GS": "Ilhas Ge\u00f3rgia do Sul e Sandwich do Sul", "HM": "Ilhas Heard e McDonald", "FK": "Ilhas Malvinas", "PN": "Ilhas Pitcairn", "SB": "Ilhas Salom\u00e3o", "TC": "Ilhas Turcas e Caicos", "VI": "Ilhas Virgens Americanas", "VG": "Ilhas Virgens Brit\u00e2nicas", "IN": "\u00cdndia", "ID": "Indon\u00e9sia", "IR": "Ir\u00e3", "IQ": "Iraque", "IE": "Irlanda", "IS": "Isl\u00e2ndia", "IL": "Israel", "IT": "It\u00e1lia", "JM": "Jamaica", "JP": "Jap\u00e3o", "JO": "Jord\u00e2nia", "KW": "Kuwait", "LA": "Laos", "LS": "Lesoto", "LV": "Let\u00f4nia", "LB": "L\u00edbano", "LR": "Lib\u00e9ria", "LY": "L\u00edbia", "LI": "Liechtenstein", "LT": "Litu\u00e2nia", "LU": "Luxemburgo", "MO": "Macau, RAE da China", "MK": "Maced\u00f4nia do Norte", "MG": "Madagascar", "MY": "Mal\u00e1sia", "MW": "Malaui", "MV": "Maldivas", "ML": "Mali", "MT": "Malta", "MA": "Marrocos", "MQ": "Martinica", "MU": "Maur\u00edcio", "MR": "Maurit\u00e2nia", "YT": "Mayotte", "MX": "M\u00e9xico", "MM": "Mianmar (Birm\u00e2nia)", "MZ": "Mo\u00e7ambique", "MD": "Moldova", "MC": "M\u00f4naco", "MN": "Mong\u00f3lia", "ME": "Montenegro", "MS": "Montserrat", "NA": "Nam\u00edbia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicar\u00e1gua", "NE": "N\u00edger", "NG": "Nig\u00e9ria", "NU": "Niue", "NO": "Noruega", "NC": "Nova Caled\u00f4nia", "NZ": "Nova Zel\u00e2ndia", "OM": "Om\u00e3", "NL": "Pa\u00edses Baixos", "BQ": "Pa\u00edses Baixos Caribenhos", "PW": "Palau", "PA": "Panam\u00e1", "PG": "Papua-Nova Guin\u00e9", "PK": "Paquist\u00e3o", "PY": "Paraguai", "PE": "Peru", "PF": "Polin\u00e9sia Francesa", "PL": "Pol\u00f4nia", "PR": "Porto Rico", "PT": "Portugal", "KE": "Qu\u00eania", "KG": "Quirguist\u00e3o", "KI": "Quiribati", "GB": "Reino Unido", "CF": "Rep\u00fablica Centro-Africana", "CG": "Rep\u00fablica do Congo", "DO": "Rep\u00fablica Dominicana", "RE": "Reuni\u00e3o", "RO": "Rom\u00eania", "RW": "Ruanda", "RU": "R\u00fassia", "EH": "Saara Ocidental", "WS": "Samoa", "AS": "Samoa Americana", "SM": "San Marino", "SH": "Santa Helena", "LC": "Santa L\u00facia", "BL": "S\u00e3o Bartolomeu", "KN": "S\u00e3o Crist\u00f3v\u00e3o e N\u00e9vis", "MF": "S\u00e3o Martinho", "PM": "S\u00e3o Pedro e Miquel\u00e3o", "ST": "S\u00e3o Tom\u00e9 e Pr\u00edncipe", "VC": "S\u00e3o Vicente e Granadinas", "SC": "Seicheles", "SN": "Senegal", "SL": "Serra Leoa", "RS": "S\u00e9rvia", "SG": "Singapura", "SX": "Sint Maarten", "SY": "S\u00edria", "SO": "Som\u00e1lia", "LK": "Sri Lanka", "SD": "Sud\u00e3o", "SS": "Sud\u00e3o do Sul", "SE": "Su\u00e9cia", "CH": "Su\u00ed\u00e7a", "SR": "Suriname", "SJ": "Svalbard e Jan Mayen", "TJ": "Tadjiquist\u00e3o", "TH": "Tail\u00e2ndia", "TW": "Taiwan", "TZ": "Tanz\u00e2nia", "CZ": "Tch\u00e9quia", "IO": "Territ\u00f3rio Brit\u00e2nico do Oceano \u00cdndico", "TF": "Territ\u00f3rios Franceses do Sul", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad e Tobago", "TN": "Tun\u00edsia", "TM": "Turcomenist\u00e3o", "TR": "Turquia", "UA": "Ucr\u00e2nia", "UG": "Uganda", "UY": "Uruguai", "UZ": "Uzbequist\u00e3o", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietn\u00e3", "WF": "Wallis e Futuna", "ZM": "Z\u00e2mbia", "ZW": "Zimb\u00e1bue"}onionshare-2.6.3/desktop/onionshare/resources/countries/pt_PT.json000066400000000000000000000125511475545702100254710ustar00rootroot00000000000000{"AF": "Afeganist\u00e3o", "ZA": "\u00c1frica do Sul", "AX": "Alanda", "AL": "Alb\u00e2nia", "DE": "Alemanha", "AD": "Andorra", "AO": "Angola", "AI": "Anguila", "AQ": "Ant\u00e1rtida", "AG": "Ant\u00edgua e Barbuda", "SA": "Ar\u00e1bia Saudita", "DZ": "Arg\u00e9lia", "AR": "Argentina", "AM": "Arm\u00e9nia", "AW": "Aruba", "AU": "Austr\u00e1lia", "AT": "\u00c1ustria", "AZ": "Azerbaij\u00e3o", "BS": "Baamas", "BD": "Bangladeche", "BB": "Barbados", "BH": "Bar\u00e9m", "BE": "B\u00e9lgica", "BZ": "Belize", "BJ": "Benim", "BM": "Bermudas", "BY": "Bielorr\u00fassia", "BO": "Bol\u00edvia", "BA": "B\u00f3snia e Herzegovina", "BW": "Botsuana", "BR": "Brasil", "BN": "Brunei", "BG": "Bulg\u00e1ria", "BF": "Burquina Faso", "BI": "Burundi", "BT": "But\u00e3o", "CV": "Cabo Verde", "CM": "Camar\u00f5es", "KH": "Camboja", "CA": "Canad\u00e1", "QA": "Catar", "KZ": "Cazaquist\u00e3o", "TD": "Chade", "CZ": "Ch\u00e9quia", "CL": "Chile", "CN": "China", "CY": "Chipre", "VA": "Cidade do Vaticano", "CO": "Col\u00f4mbia", "KM": "Comores", "CG": "Congo-Brazzaville", "CD": "Congo-Kinshasa", "KP": "Coreia do Norte", "KR": "Coreia do Sul", "CR": "Costa Rica", "CI": "C\u00f4te d\u2019Ivoire (Costa do Marfim)", "HR": "Cro\u00e1cia", "CU": "Cuba", "CW": "Cura\u00e7au", "DK": "Dinamarca", "DM": "Dom\u00ednica", "EG": "Egito", "AE": "Emirados \u00c1rabes Unidos", "EC": "Equador", "ER": "Eritreia", "SK": "Eslov\u00e1quia", "SI": "Eslov\u00e9nia", "ES": "Espanha", "SZ": "Essuat\u00edni", "US": "Estados Unidos", "EE": "Est\u00f3nia", "ET": "Eti\u00f3pia", "FJ": "Fiji", "PH": "Filipinas", "FI": "Finl\u00e2ndia", "FR": "Fran\u00e7a", "GA": "Gab\u00e3o", "GM": "G\u00e2mbia", "GH": "Gana", "GE": "Ge\u00f3rgia", "GI": "Gibraltar", "GD": "Granada", "GR": "Gr\u00e9cia", "GL": "Gronel\u00e2ndia", "GP": "Guadalupe", "GU": "Guame", "GT": "Guatemala", "GG": "Guernesey", "GY": "Guiana", "GF": "Guiana Francesa", "GN": "Guin\u00e9", "GQ": "Guin\u00e9 Equatorial", "GW": "Guin\u00e9-Bissau", "HT": "Haiti", "HN": "Honduras", "HK": "Hong Kong, RAE da China", "HU": "Hungria", "YE": "I\u00e9men", "BV": "Ilha Bouvet", "IM": "Ilha de Man", "CX": "Ilha do Natal", "NF": "Ilha Norfolk", "KY": "Ilhas Caim\u00e3o", "CK": "Ilhas Cook", "CC": "Ilhas dos Cocos (Keeling)", "FO": "Ilhas Faro\u00e9", "GS": "Ilhas Ge\u00f3rgia do Sul e Sandwich do Sul", "HM": "Ilhas Heard e McDonald", "FK": "Ilhas Malvinas (Falkland)", "PN": "Ilhas Pitcairn", "SB": "Ilhas Salom\u00e3o", "TC": "Ilhas Turcas e Caicos", "VG": "Ilhas Virgens Brit\u00e2nicas", "VI": "Ilhas Virgens dos EUA", "IN": "\u00cdndia", "ID": "Indon\u00e9sia", "IR": "Ir\u00e3o", "IQ": "Iraque", "IE": "Irlanda", "IS": "Isl\u00e2ndia", "IL": "Israel", "IT": "It\u00e1lia", "JM": "Jamaica", "JP": "Jap\u00e3o", "DJ": "Jibuti", "JO": "Jord\u00e2nia", "KW": "Koweit", "LA": "Laos", "LS": "Lesoto", "LV": "Let\u00f3nia", "LB": "L\u00edbano", "LR": "Lib\u00e9ria", "LY": "L\u00edbia", "LI": "Listenstaine", "LT": "Litu\u00e2nia", "LU": "Luxemburgo", "MO": "Macau, RAE da China", "MK": "Maced\u00f3nia do Norte", "MG": "Madag\u00e1scar", "YT": "Maiote", "MY": "Mal\u00e1sia", "MW": "Mal\u00e1ui", "MV": "Maldivas", "ML": "Mali", "MT": "Malta", "MA": "Marrocos", "MQ": "Martinica", "MU": "Maur\u00edcia", "MR": "Maurit\u00e2nia", "MX": "M\u00e9xico", "MM": "Mianmar (Birm\u00e2nia)", "MZ": "Mo\u00e7ambique", "MD": "Mold\u00e1via", "MC": "M\u00f3naco", "MN": "Mong\u00f3lia", "MS": "Monserrate", "ME": "Montenegro", "NA": "Nam\u00edbia", "NR": "Nauru", "NP": "Nepal", "NI": "Nicar\u00e1gua", "NE": "N\u00edger", "NG": "Nig\u00e9ria", "NU": "Niu\u00ea", "NO": "Noruega", "NC": "Nova Caled\u00f3nia", "NZ": "Nova Zel\u00e2ndia", "OM": "Om\u00e3", "NL": "Pa\u00edses Baixos", "BQ": "Pa\u00edses Baixos Caribenhos", "PW": "Palau", "PA": "Panam\u00e1", "PG": "Papua-Nova Guin\u00e9", "PK": "Paquist\u00e3o", "PY": "Paraguai", "PE": "Peru", "PF": "Polin\u00e9sia Francesa", "PL": "Pol\u00f3nia", "PR": "Porto Rico", "PT": "Portugal", "KE": "Qu\u00e9nia", "KG": "Quirguist\u00e3o", "KI": "Quirib\u00e1ti", "GB": "Reino Unido", "CF": "Rep\u00fablica Centro-Africana", "DO": "Rep\u00fablica Dominicana", "RE": "Reuni\u00e3o", "RO": "Rom\u00e9nia", "RW": "Ruanda", "RU": "R\u00fassia", "SV": "Salvador", "WS": "Samoa", "AS": "Samoa Americana", "SH": "Santa Helena", "LC": "Santa L\u00facia", "BL": "S\u00e3o Bartolomeu", "KN": "S\u00e3o Crist\u00f3v\u00e3o e Neves", "SM": "S\u00e3o Marinho", "MF": "S\u00e3o Martinho", "SX": "S\u00e3o Martinho (Sint Maarten)", "PM": "S\u00e3o Pedro e Miquel\u00e3o", "ST": "S\u00e3o Tom\u00e9 e Pr\u00edncipe", "VC": "S\u00e3o Vicente e Granadinas", "EH": "Sara Ocidental", "SC": "Seicheles", "SN": "Senegal", "SL": "Serra Leoa", "RS": "S\u00e9rvia", "SG": "Singapura", "SY": "S\u00edria", "SO": "Som\u00e1lia", "LK": "Sri Lanca", "SD": "Sud\u00e3o", "SS": "Sud\u00e3o do Sul", "SE": "Su\u00e9cia", "CH": "Su\u00ed\u00e7a", "SR": "Suriname", "SJ": "Svalbard e Jan Mayen", "TH": "Tail\u00e2ndia", "TW": "Taiwan", "TJ": "Tajiquist\u00e3o", "TZ": "Tanz\u00e2nia", "IO": "Territ\u00f3rio Brit\u00e2nico do Oceano \u00cdndico", "TF": "Territ\u00f3rios Austrais Franceses", "TL": "Timor-Leste", "TG": "Togo", "TO": "Tonga", "TK": "Toquelau", "TT": "Trindade e Tobago", "TN": "Tun\u00edsia", "TM": "Turquemenist\u00e3o", "TR": "Turquia", "UA": "Ucr\u00e2nia", "UG": "Uganda", "UY": "Uruguai", "UZ": "Usbequist\u00e3o", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietname", "WF": "Wallis e Futuna", "ZM": "Z\u00e2mbia", "ZW": "Zimbabu\u00e9"}onionshare-2.6.3/desktop/onionshare/resources/countries/ru.json000066400000000000000000000367101475545702100250740ustar00rootroot00000000000000{"AU": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "AT": "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "AZ": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "AX": "\u0410\u043b\u0430\u043d\u0434\u0441\u043a\u0438\u0435 \u043e-\u0432\u0430", "AL": "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "DZ": "\u0410\u043b\u0436\u0438\u0440", "AS": "\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0435 \u0421\u0430\u043c\u043e\u0430", "AI": "\u0410\u043d\u0433\u0438\u043b\u044c\u044f", "AO": "\u0410\u043d\u0433\u043e\u043b\u0430", "AD": "\u0410\u043d\u0434\u043e\u0440\u0440\u0430", "AQ": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u0430", "AG": "\u0410\u043d\u0442\u0438\u0433\u0443\u0430 \u0438 \u0411\u0430\u0440\u0431\u0443\u0434\u0430", "AR": "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "AM": "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "AW": "\u0410\u0440\u0443\u0431\u0430", "AF": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "BS": "\u0411\u0430\u0433\u0430\u043c\u044b", "BD": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "BB": "\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441", "BH": "\u0411\u0430\u0445\u0440\u0435\u0439\u043d", "BY": "\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c", "BZ": "\u0411\u0435\u043b\u0438\u0437", "BE": "\u0411\u0435\u043b\u044c\u0433\u0438\u044f", "BJ": "\u0411\u0435\u043d\u0438\u043d", "BM": "\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u043a\u0438\u0435 \u043e-\u0432\u0430", "BG": "\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f", "BO": "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "BQ": "\u0411\u043e\u043d\u044d\u0439\u0440, \u0421\u0438\u043d\u0442-\u042d\u0441\u0442\u0430\u0442\u0438\u0443\u0441 \u0438 \u0421\u0430\u0431\u0430", "BA": "\u0411\u043e\u0441\u043d\u0438\u044f \u0438 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "BW": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "BR": "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "IO": "\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430\u044f \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f \u0432 \u0418\u043d\u0434\u0438\u0439\u0441\u043a\u043e\u043c \u043e\u043a\u0435\u0430\u043d\u0435", "BN": "\u0411\u0440\u0443\u043d\u0435\u0439-\u0414\u0430\u0440\u0443\u0441\u0441\u0430\u043b\u0430\u043c", "BF": "\u0411\u0443\u0440\u043a\u0438\u043d\u0430-\u0424\u0430\u0441\u043e", "BI": "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "BT": "\u0411\u0443\u0442\u0430\u043d", "VU": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "VA": "\u0412\u0430\u0442\u0438\u043a\u0430\u043d", "GB": "\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "HU": "\u0412\u0435\u043d\u0433\u0440\u0438\u044f", "VE": "\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u0430", "VG": "\u0412\u0438\u0440\u0433\u0438\u043d\u0441\u043a\u0438\u0435 \u043e-\u0432\u0430 (\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f)", "VI": "\u0412\u0438\u0440\u0433\u0438\u043d\u0441\u043a\u0438\u0435 \u043e-\u0432\u0430 (\u0421\u0428\u0410)", "TL": "\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0422\u0438\u043c\u043e\u0440", "VN": "\u0412\u044c\u0435\u0442\u043d\u0430\u043c", "GA": "\u0413\u0430\u0431\u043e\u043d", "HT": "\u0413\u0430\u0438\u0442\u0438", "GY": "\u0413\u0430\u0439\u0430\u043d\u0430", "GM": "\u0413\u0430\u043c\u0431\u0438\u044f", "GH": "\u0413\u0430\u043d\u0430", "GP": "\u0413\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0430", "GT": "\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "GN": "\u0413\u0432\u0438\u043d\u0435\u044f", "GW": "\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443", "DE": "\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f", "GG": "\u0413\u0435\u0440\u043d\u0441\u0438", "GI": "\u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440", "HN": "\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "HK": "\u0413\u043e\u043d\u043a\u043e\u043d\u0433 (\u0421\u0410\u0420)", "GD": "\u0413\u0440\u0435\u043d\u0430\u0434\u0430", "GL": "\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "GR": "\u0413\u0440\u0435\u0446\u0438\u044f", "GE": "\u0413\u0440\u0443\u0437\u0438\u044f", "GU": "\u0413\u0443\u0430\u043c", "DK": "\u0414\u0430\u043d\u0438\u044f", "DJ": "\u0414\u0436\u0438\u0431\u0443\u0442\u0438", "DM": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430", "DO": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "EG": "\u0415\u0433\u0438\u043f\u0435\u0442", "ZM": "\u0417\u0430\u043c\u0431\u0438\u044f", "EH": "\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0421\u0430\u0445\u0430\u0440\u0430", "ZW": "\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435", "IL": "\u0418\u0437\u0440\u0430\u0438\u043b\u044c", "IN": "\u0418\u043d\u0434\u0438\u044f", "ID": "\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f", "JO": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "IQ": "\u0418\u0440\u0430\u043a", "IR": "\u0418\u0440\u0430\u043d", "IE": "\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f", "IS": "\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f", "ES": "\u0418\u0441\u043f\u0430\u043d\u0438\u044f", "IT": "\u0418\u0442\u0430\u043b\u0438\u044f", "YE": "\u0419\u0435\u043c\u0435\u043d", "CV": "\u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435", "KZ": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "KH": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "CM": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "CA": "\u041a\u0430\u043d\u0430\u0434\u0430", "QA": "\u041a\u0430\u0442\u0430\u0440", "KE": "\u041a\u0435\u043d\u0438\u044f", "CY": "\u041a\u0438\u043f\u0440", "KG": "\u041a\u0438\u0440\u0433\u0438\u0437\u0438\u044f", "KI": "\u041a\u0438\u0440\u0438\u0431\u0430\u0442\u0438", "CN": "\u041a\u0438\u0442\u0430\u0439", "KP": "\u041a\u041d\u0414\u0420", "CC": "\u041a\u043e\u043a\u043e\u0441\u043e\u0432\u044b\u0435 \u043e-\u0432\u0430", "CO": "\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f", "KM": "\u041a\u043e\u043c\u043e\u0440\u044b", "CG": "\u041a\u043e\u043d\u0433\u043e - \u0411\u0440\u0430\u0437\u0437\u0430\u0432\u0438\u043b\u044c", "CD": "\u041a\u043e\u043d\u0433\u043e - \u041a\u0438\u043d\u0448\u0430\u0441\u0430", "CR": "\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430", "CI": "\u041a\u043e\u0442-\u0434\u2019\u0418\u0432\u0443\u0430\u0440", "CU": "\u041a\u0443\u0431\u0430", "KW": "\u041a\u0443\u0432\u0435\u0439\u0442", "CW": "\u041a\u044e\u0440\u0430\u0441\u0430\u043e", "LA": "\u041b\u0430\u043e\u0441", "LV": "\u041b\u0430\u0442\u0432\u0438\u044f", "LS": "\u041b\u0435\u0441\u043e\u0442\u043e", "LR": "\u041b\u0438\u0431\u0435\u0440\u0438\u044f", "LB": "\u041b\u0438\u0432\u0430\u043d", "LY": "\u041b\u0438\u0432\u0438\u044f", "LT": "\u041b\u0438\u0442\u0432\u0430", "LI": "\u041b\u0438\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d", "LU": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "MU": "\u041c\u0430\u0432\u0440\u0438\u043a\u0438\u0439", "MR": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "MG": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "YT": "\u041c\u0430\u0439\u043e\u0442\u0442\u0430", "MO": "\u041c\u0430\u043a\u0430\u043e (\u0421\u0410\u0420)", "MW": "\u041c\u0430\u043b\u0430\u0432\u0438", "MY": "\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f", "ML": "\u041c\u0430\u043b\u0438", "MV": "\u041c\u0430\u043b\u044c\u0434\u0438\u0432\u044b", "MT": "\u041c\u0430\u043b\u044c\u0442\u0430", "MA": "\u041c\u0430\u0440\u043e\u043a\u043a\u043e", "MQ": "\u041c\u0430\u0440\u0442\u0438\u043d\u0438\u043a\u0430", "MX": "\u041c\u0435\u043a\u0441\u0438\u043a\u0430", "MZ": "\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a", "MD": "\u041c\u043e\u043b\u0434\u043e\u0432\u0430", "MC": "\u041c\u043e\u043d\u0430\u043a\u043e", "MN": "\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f", "MS": "\u041c\u043e\u043d\u0442\u0441\u0435\u0440\u0440\u0430\u0442", "MM": "\u041c\u044c\u044f\u043d\u043c\u0430 (\u0411\u0438\u0440\u043c\u0430)", "NA": "\u041d\u0430\u043c\u0438\u0431\u0438\u044f", "NR": "\u041d\u0430\u0443\u0440\u0443", "NP": "\u041d\u0435\u043f\u0430\u043b", "NE": "\u041d\u0438\u0433\u0435\u0440", "NG": "\u041d\u0438\u0433\u0435\u0440\u0438\u044f", "NL": "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u044b", "NI": "\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "NU": "\u041d\u0438\u0443\u044d", "NZ": "\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f", "NC": "\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f", "NO": "\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f", "BV": "\u043e-\u0432 \u0411\u0443\u0432\u0435", "IM": "\u043e-\u0432 \u041c\u044d\u043d", "NF": "\u043e-\u0432 \u041d\u043e\u0440\u0444\u043e\u043b\u043a", "CX": "\u043e-\u0432 \u0420\u043e\u0436\u0434\u0435\u0441\u0442\u0432\u0430", "SH": "\u043e-\u0432 \u0421\u0432. \u0415\u043b\u0435\u043d\u044b", "PN": "\u043e-\u0432\u0430 \u041f\u0438\u0442\u043a\u044d\u0440\u043d", "TC": "\u043e-\u0432\u0430 \u0422\u0451\u0440\u043a\u0441 \u0438 \u041a\u0430\u0439\u043a\u043e\u0441", "HM": "\u043e-\u0432\u0430 \u0425\u0435\u0440\u0434 \u0438 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u044c\u0434", "AE": "\u041e\u0410\u042d", "OM": "\u041e\u043c\u0430\u043d", "KY": "\u041e\u0441\u0442\u0440\u043e\u0432\u0430 \u041a\u0430\u0439\u043c\u0430\u043d", "CK": "\u041e\u0441\u0442\u0440\u043e\u0432\u0430 \u041a\u0443\u043a\u0430", "PK": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "PW": "\u041f\u0430\u043b\u0430\u0443", "PA": "\u041f\u0430\u043d\u0430\u043c\u0430", "PG": "\u041f\u0430\u043f\u0443\u0430 \u2014 \u041d\u043e\u0432\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "PY": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "PE": "\u041f\u0435\u0440\u0443", "PL": "\u041f\u043e\u043b\u044c\u0448\u0430", "PT": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f", "PR": "\u041f\u0443\u044d\u0440\u0442\u043e-\u0420\u0438\u043a\u043e", "KR": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u0440\u0435\u044f", "RE": "\u0420\u0435\u044e\u043d\u044c\u043e\u043d", "RU": "\u0420\u043e\u0441\u0441\u0438\u044f", "RW": "\u0420\u0443\u0430\u043d\u0434\u0430", "RO": "\u0420\u0443\u043c\u044b\u043d\u0438\u044f", "SV": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "WS": "\u0421\u0430\u043c\u043e\u0430", "SM": "\u0421\u0430\u043d-\u041c\u0430\u0440\u0438\u043d\u043e", "ST": "\u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0438 \u041f\u0440\u0438\u043d\u0441\u0438\u043f\u0438", "SA": "\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0438\u044f", "MK": "\u0421\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f", "SC": "\u0421\u0435\u0439\u0448\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "BL": "\u0421\u0435\u043d-\u0411\u0430\u0440\u0442\u0435\u043b\u0435\u043c\u0438", "MF": "\u0421\u0435\u043d-\u041c\u0430\u0440\u0442\u0435\u043d", "PM": "\u0421\u0435\u043d-\u041f\u044c\u0435\u0440 \u0438 \u041c\u0438\u043a\u0435\u043b\u043e\u043d", "SN": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "VC": "\u0421\u0435\u043d\u0442-\u0412\u0438\u043d\u0441\u0435\u043d\u0442 \u0438 \u0413\u0440\u0435\u043d\u0430\u0434\u0438\u043d\u044b", "KN": "\u0421\u0435\u043d\u0442-\u041a\u0438\u0442\u0441 \u0438 \u041d\u0435\u0432\u0438\u0441", "LC": "\u0421\u0435\u043d\u0442-\u041b\u044e\u0441\u0438\u044f", "RS": "\u0421\u0435\u0440\u0431\u0438\u044f", "SG": "\u0421\u0438\u043d\u0433\u0430\u043f\u0443\u0440", "SX": "\u0421\u0438\u043d\u0442-\u041c\u0430\u0440\u0442\u0435\u043d", "SY": "\u0421\u0438\u0440\u0438\u044f", "SK": "\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f", "SI": "\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f", "US": "\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0428\u0442\u0430\u0442\u044b", "SB": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "SO": "\u0421\u043e\u043c\u0430\u043b\u0438", "SD": "\u0421\u0443\u0434\u0430\u043d", "SR": "\u0421\u0443\u0440\u0438\u043d\u0430\u043c", "SL": "\u0421\u044c\u0435\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435", "TJ": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "TH": "\u0422\u0430\u0438\u043b\u0430\u043d\u0434", "TW": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "TZ": "\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f", "TG": "\u0422\u043e\u0433\u043e", "TK": "\u0422\u043e\u043a\u0435\u043b\u0430\u0443", "TO": "\u0422\u043e\u043d\u0433\u0430", "TT": "\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e", "TN": "\u0422\u0443\u043d\u0438\u0441", "TM": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u0441\u0442\u0430\u043d", "TR": "\u0422\u0443\u0440\u0446\u0438\u044f", "UG": "\u0423\u0433\u0430\u043d\u0434\u0430", "UZ": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "UA": "\u0423\u043a\u0440\u0430\u0438\u043d\u0430", "WF": "\u0423\u043e\u043b\u043b\u0438\u0441 \u0438 \u0424\u0443\u0442\u0443\u043d\u0430", "UY": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "FO": "\u0424\u0430\u0440\u0435\u0440\u0441\u043a\u0438\u0435 \u043e-\u0432\u0430", "FJ": "\u0424\u0438\u0434\u0436\u0438", "PH": "\u0424\u0438\u043b\u0438\u043f\u043f\u0438\u043d\u044b", "FI": "\u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u044f", "FK": "\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0435 \u043e-\u0432\u0430", "FR": "\u0424\u0440\u0430\u043d\u0446\u0438\u044f", "GF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0430\u044f \u0413\u0432\u0438\u0430\u043d\u0430", "PF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0430\u044f \u041f\u043e\u043b\u0438\u043d\u0435\u0437\u0438\u044f", "TF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0435 \u042e\u0436\u043d\u044b\u0435 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438", "HR": "\u0425\u043e\u0440\u0432\u0430\u0442\u0438\u044f", "CF": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "TD": "\u0427\u0430\u0434", "ME": "\u0427\u0435\u0440\u043d\u043e\u0433\u043e\u0440\u0438\u044f", "CZ": "\u0427\u0435\u0445\u0438\u044f", "CL": "\u0427\u0438\u043b\u0438", "CH": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f", "SE": "\u0428\u0432\u0435\u0446\u0438\u044f", "SJ": "\u0428\u043f\u0438\u0446\u0431\u0435\u0440\u0433\u0435\u043d \u0438 \u042f\u043d-\u041c\u0430\u0439\u0435\u043d", "LK": "\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0430", "EC": "\u042d\u043a\u0432\u0430\u0434\u043e\u0440", "GQ": "\u042d\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "ER": "\u042d\u0440\u0438\u0442\u0440\u0435\u044f", "SZ": "\u042d\u0441\u0432\u0430\u0442\u0438\u043d\u0438", "EE": "\u042d\u0441\u0442\u043e\u043d\u0438\u044f", "ET": "\u042d\u0444\u0438\u043e\u043f\u0438\u044f", "GS": "\u042e\u0436\u043d\u0430\u044f \u0413\u0435\u043e\u0440\u0433\u0438\u044f \u0438 \u042e\u0436\u043d\u044b\u0435 \u0421\u0430\u043d\u0434\u0432\u0438\u0447\u0435\u0432\u044b \u043e-\u0432\u0430", "ZA": "\u042e\u0436\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "SS": "\u042e\u0436\u043d\u044b\u0439 \u0421\u0443\u0434\u0430\u043d", "JM": "\u042f\u043c\u0430\u0439\u043a\u0430", "JP": "\u042f\u043f\u043e\u043d\u0438\u044f"}onionshare-2.6.3/desktop/onionshare/resources/countries/sk.json000066400000000000000000000130121475545702100250510ustar00rootroot00000000000000{"AF": "Afganistan", "AX": "Alandy", "AL": "Alb\u00e1nsko", "DZ": "Al\u017e\u00edrsko", "AS": "Americk\u00e1 Samoa", "VI": "Americk\u00e9 Panensk\u00e9 ostrovy", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarkt\u00edda", "AG": "Antigua a Barbuda", "AR": "Argent\u00edna", "AM": "Arm\u00e9nsko", "AW": "Aruba", "AU": "Austr\u00e1lia", "AZ": "Azerbajd\u017ean", "BS": "Bahamy", "BH": "Bahrajn", "BD": "Banglad\u00e9\u0161", "BB": "Barbados", "BE": "Belgicko", "BZ": "Belize", "BJ": "Benin", "BM": "Bermudy", "BT": "Bhut\u00e1n", "BY": "Bielorusko", "BO": "Bol\u00edvia", "BA": "Bosna a Hercegovina", "BW": "Botswana", "BV": "Bouvetov ostrov", "BR": "Braz\u00edlia", "IO": "Britsk\u00e9 indickooce\u00e1nske \u00fazemie", "VG": "Britsk\u00e9 Panensk\u00e9 ostrovy", "BN": "Brunej", "BG": "Bulharsko", "BF": "Burkina Faso", "BI": "Burundi", "CK": "Cookove ostrovy", "CW": "Cura\u00e7ao", "CY": "Cyprus", "TD": "\u010cad", "CZ": "\u010cesko", "ME": "\u010cierna Hora", "CL": "\u010cile", "CN": "\u010c\u00edna", "DK": "D\u00e1nsko", "DM": "Dominika", "DO": "Dominik\u00e1nska republika", "DJ": "D\u017eibutsko", "EG": "Egypt", "EC": "Ekv\u00e1dor", "ER": "Eritrea", "EE": "Est\u00f3nsko", "SZ": "Eswatini", "ET": "Eti\u00f3pia", "FO": "Faersk\u00e9 ostrovy", "FK": "Falklandy", "FJ": "Fid\u017ei", "PH": "Filip\u00edny", "FI": "F\u00ednsko", "GF": "Franc\u00fazska Guyana", "PF": "Franc\u00fazska Polyn\u00e9zia", "TF": "Franc\u00fazske ju\u017en\u00e9 a antarktick\u00e9 \u00fazemia", "FR": "Franc\u00fazsko", "GA": "Gabon", "GM": "Gambia", "GH": "Ghana", "GI": "Gibralt\u00e1r", "GR": "Gr\u00e9cko", "GD": "Grenada", "GL": "Gr\u00f3nsko", "GE": "Gruz\u00ednsko", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heardov ostrov a Macdonaldove ostrovy", "NL": "Holandsko", "HN": "Honduras", "HK": "Hongkong \u2013 OAO \u010c\u00edny", "HR": "Chorv\u00e1tsko", "IN": "India", "ID": "Indon\u00e9zia", "IQ": "Irak", "IR": "Ir\u00e1n", "IE": "\u00cdrsko", "IS": "Island", "IL": "Izrael", "JM": "Jamajka", "JP": "Japonsko", "YE": "Jemen", "JO": "Jord\u00e1nsko", "ZA": "Ju\u017en\u00e1 Afrika", "GS": "Ju\u017en\u00e1 Georgia a Ju\u017en\u00e9 Sandwichove ostrovy", "KR": "Ju\u017en\u00e1 K\u00f3rea", "SS": "Ju\u017en\u00fd Sud\u00e1n", "KY": "Kajmanie ostrovy", "KH": "Kambod\u017ea", "CM": "Kamerun", "CA": "Kanada", "CV": "Kapverdy", "BQ": "Karibsk\u00e9 Holandsko", "QA": "Katar", "KZ": "Kazachstan", "KE": "Ke\u0148a", "KG": "Kirgizsko", "KI": "Kiribati", "CC": "Kokosov\u00e9 ostrovy", "CO": "Kolumbia", "KM": "Komory", "CD": "Kon\u017esk\u00e1 demokratick\u00e1 republika", "CG": "Kon\u017esk\u00e1 republika", "CR": "Kostarika", "CU": "Kuba", "KW": "Kuvajt", "LA": "Laos", "LS": "Lesotho", "LB": "Libanon", "LR": "Lib\u00e9ria", "LY": "L\u00edbya", "LI": "Lichten\u0161tajnsko", "LT": "Litva", "LV": "Loty\u0161sko", "LU": "Luxembursko", "MO": "Macao \u2013 OAO \u010c\u00edny", "MG": "Madagaskar", "HU": "Ma\u010farsko", "MY": "Malajzia", "MW": "Malawi", "MV": "Maldivy", "ML": "Mali", "MT": "Malta", "MA": "Maroko", "MQ": "Martinik", "MU": "Maur\u00edcius", "MR": "Maurit\u00e1nia", "YT": "Mayotte", "MX": "Mexiko", "MM": "Mjanmarsko", "MD": "Moldavsko", "MC": "Monako", "MN": "Mongolsko", "MS": "Montserrat", "MZ": "Mozambik", "NA": "Nam\u00edbia", "NR": "Nauru", "DE": "Nemecko", "NP": "Nep\u00e1l", "NE": "Niger", "NG": "Nig\u00e9ria", "NI": "Nikaragua", "NU": "Niue", "NF": "Norfolk", "NO": "N\u00f3rsko", "NC": "Nov\u00e1 Kaled\u00f3nia", "NZ": "Nov\u00fd Z\u00e9land", "OM": "Om\u00e1n", "IM": "Ostrov Man", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua-Nov\u00e1 Guinea", "PY": "Paraguaj", "PE": "Peru", "PN": "Pitcairnove ostrovy", "CI": "Pobre\u017eie Slonoviny", "PL": "Po\u013esko", "PR": "Portoriko", "PT": "Portugalsko", "AT": "Rak\u00fasko", "RE": "R\u00e9union", "GQ": "Rovn\u00edkov\u00e1 Guinea", "RO": "Rumunsko", "RU": "Rusko", "RW": "Rwanda", "PM": "Saint Pierre a Miquelon", "SV": "Salv\u00e1dor", "WS": "Samoa", "SM": "San Mar\u00edno", "SA": "Saudsk\u00e1 Ar\u00e1bia", "SN": "Senegal", "KP": "Severn\u00e1 K\u00f3rea", "MK": "Severn\u00e9 Maced\u00f3nsko", "SC": "Seychely", "SL": "Sierra Leone", "SG": "Singapur", "SK": "Slovensko", "SI": "Slovinsko", "SO": "Som\u00e1lsko", "AE": "Spojen\u00e9 arabsk\u00e9 emir\u00e1ty", "GB": "Spojen\u00e9 kr\u00e1\u013eovstvo", "US": "Spojen\u00e9 \u0161t\u00e1ty", "RS": "Srbsko", "LK": "Sr\u00ed Lanka", "CF": "Stredoafrick\u00e1 republika", "SD": "Sud\u00e1n", "SR": "Surinam", "SJ": "Svalbard a Jan Mayen", "SH": "Sv\u00e4t\u00e1 Helena", "LC": "Sv\u00e4t\u00e1 Lucia", "BL": "Sv\u00e4t\u00fd Bartolomej", "KN": "Sv\u00e4t\u00fd Kri\u0161tof a Nevis", "MF": "Sv\u00e4t\u00fd Martin (fr.)", "SX": "Sv\u00e4t\u00fd Martin (hol.)", "ST": "Sv\u00e4t\u00fd Tom\u00e1\u0161 a Princov ostrov", "VC": "Sv\u00e4t\u00fd Vincent a Grenad\u00edny", "SY": "S\u00fdria", "SB": "\u0160alam\u00fanove ostrovy", "ES": "\u0160panielsko", "CH": "\u0160vaj\u010diarsko", "SE": "\u0160v\u00e9dsko", "TJ": "Tad\u017eikistan", "TW": "Taiwan", "IT": "Taliansko", "TZ": "Tanz\u00e1nia", "TH": "Thajsko", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad a Tobago", "TN": "Tunisko", "TR": "Turecko", "TM": "Turkm\u00e9nsko", "TC": "Turks a Caicos", "UG": "Uganda", "UA": "Ukrajina", "UY": "Uruguaj", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatik\u00e1n", "VE": "Venezuela", "CX": "Viano\u010dn\u00fd ostrov", "VN": "Vietnam", "TL": "V\u00fdchodn\u00fd Timor", "WF": "Wallis a Futuna", "ZM": "Zambia", "EH": "Z\u00e1padn\u00e1 Sahara", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/sn.json000066400000000000000000000113221475545702100250560ustar00rootroot00000000000000{"AF": "Afuganistani", "AR": "Ajentina", "AX": "\u00c5land Islands", "AL": "Albania", "DZ": "Aljeria", "US": "Amerika", "AD": "Andora", "AO": "Angola", "AI": "Anguila", "AQ": "Antarctica", "AG": "Antigua ne Barbuda", "AM": "Armenia", "AW": "Arubha", "AU": "Australia", "AT": "Austria", "AZ": "Azabajani", "BS": "Bahama", "BH": "Bahareni", "BD": "Bangladeshi", "BB": "Barbados", "BY": "Belarusi", "BZ": "Belize", "BE": "Beljium", "BJ": "Benini", "BM": "Bermuda", "BT": "Bhutani", "BO": "Bolivia", "BW": "Botswana", "BV": "Bouvet Island", "BA": "Boznia ne Herzegovina", "BR": "Brazil", "IO": "British Indian Ocean Territory", "BF": "Bukinafaso", "BG": "Bulgaria", "BI": "Burundi", "BN": "Burunei", "BQ": "Caribbean Netherlands", "CF": "Central African Republic", "TD": "Chadi", "CL": "Chile", "CN": "China", "NF": "Chitsuwa cheNorfolk", "CX": "Christmas Island", "CC": "Cocos (Keeling) Islands", "CU": "Cuba", "CW": "Cura\u00e7ao", "CY": "Cyprus", "CZ": "Czech Republic", "CD": "Democratic Republic of the Congo", "DK": "Denmark", "DJ": "Djibouti", "DM": "Dominica", "DO": "Dominican Republic", "TL": "East Timor", "EC": "Ecuador", "EG": "Egypt", "SV": "El Salvador", "GQ": "Equatorial Guinea", "ER": "Eritrea", "EE": "Estonia", "ET": "Etiopia", "FO": "Faroe Islands", "FJ": "Fiji", "FI": "Finland", "FR": "France", "GF": "French Guiana", "PF": "French Polynesia", "TF": "French Southern Territories", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "DE": "Germany", "GH": "Ghana", "GI": "Gibraltar", "GR": "Greece", "GL": "Greenland", "GD": "Grenada", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard & McDonald Islands", "HN": "Honduras", "HK": "Hong Kong SAR China", "HU": "Hungary", "IS": "Iceland", "IN": "India", "ID": "Indonesia", "IR": "Iran", "IQ": "Iraq", "IE": "Ireland", "IM": "Isle of Man", "IT": "Italy", "CI": "Ivory Coast", "IL": "Izuraeri", "JM": "Jamaica", "JP": "Japan", "JO": "Jordan", "KH": "Kambodia", "CM": "Kameruni", "CA": "Kanada", "KZ": "Kazakhstan", "KE": "Kenya", "KI": "Kiribati", "CO": "Kolombia", "KM": "Komoro", "CG": "Kongo", "HR": "Korasia", "KP": "Korea, North", "KR": "Korea, South", "CR": "Kostarika", "KW": "Kuwait", "KG": "Kyrgyzstan", "LA": "Laos", "LV": "Latvia", "LB": "Lebanon", "LS": "Lesotho", "LR": "Liberia", "LY": "Libya", "LI": "Liechtenstein", "LT": "Lithuania", "LU": "Luxembourg", "MO": "Macao SAR China", "MG": "Madagascar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldives", "ML": "Mali", "MT": "Malta", "MQ": "Martinique", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexico", "MD": "Moldova", "MC": "Monaco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MA": "Morocco", "MZ": "Mozambique", "MM": "Myanmar", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NL": "Netherlands", "NC": "New Caledonia", "NZ": "New Zealand", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "MK": "North Macedonia", "NO": "Norway", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua New Guinea", "PY": "Paraguay", "PE": "Peru", "PH": "Philippines", "PN": "Pitcairn", "PL": "Poland", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "RE": "R\u00e9union", "RO": "Romania", "RU": "Russia", "RW": "Rwanda", "SH": "Saint Helena", "KN": "Saint Kitts and Nevis", "LC": "Saint Lucia", "PM": "Saint Pierre and Miquelon", "VC": "Saint Vincent and the Grenadines", "WS": "Samoa", "AS": "Samoa ye Amerika", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 and Pr\u00edncipe", "SA": "Saudi Arabia", "SN": "Senegal", "RS": "Serbia", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakia", "SI": "Slovenia", "SO": "Somalia", "ZA": "South Africa", "GS": "South Georgia & South Sandwich Islands", "SS": "South Sudan", "ES": "Spain", "LK": "Sri Lanka", "BL": "St. Barth\u00e9lemy", "MF": "St. Martin", "SD": "Sudan", "SR": "Suriname", "SJ": "Svalbard & Jan Mayen", "SZ": "Swaziland", "SE": "Sweden", "CH": "Switzerland", "SY": "Syria", "TW": "Taiwan", "TJ": "Tajikistan", "TZ": "Tanzania", "TH": "Thailand", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad and Tobago", "TN": "Tunisia", "TR": "Turkey", "TM": "Turkmenistan", "UG": "Uganda", "UA": "Ukraine", "AE": "United Arab Emirates", "GB": "United Kingdom", "UY": "Uruguay", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatican State", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis and Futuna", "EH": "Western Sahara", "YE": "Yemen", "ZM": "Zambia", "ZW": "Zimbabwe", "SB": "Zvitsuwa zvaSolomon", "VI": "Zvitsuwa zveAmerika", "CV": "Zvitsuwa zveCape Verde", "KY": "Zvitsuwa zveCayman", "CK": "Zvitsuwa zveCook", "FK": "Zvitsuwa zveFalklands", "VG": "Zvitsuwa zveHingirandi", "TC": "Zvitsuwa zveTurk neCaico"}onionshare-2.6.3/desktop/onionshare/resources/countries/sq.json000066400000000000000000000116741475545702100250730ustar00rootroot00000000000000{"AF": "Afganistan", "ZA": "Afrika e Jugut", "DZ": "Algjeri", "AD": "Andorr\u00eb", "AO": "Angol\u00eb", "AI": "Anguil\u00eb", "AQ": "Antarktik\u00eb", "AG": "Antigua e Barbuda", "SA": "Arabi Saudite", "AR": "Argjentin\u00eb", "AM": "Armeni", "AW": "Arub\u00eb", "AU": "Australi", "AT": "Austri", "AZ": "Azerbajxhan", "BS": "Bahama", "BH": "Bahrejn", "BD": "Bangladesh", "BB": "Barbados", "BE": "Belgjik\u00eb", "BZ": "Beliz\u00eb", "BJ": "Benin", "BM": "Bermude", "BY": "Bjellorusi", "BO": "Bolivi", "BA": "Bosnj\u00eb-Hercegovin\u00eb", "BW": "Botsvan\u00eb", "BR": "Brazil", "BN": "Brunei", "BG": "Bullgari", "BF": "Burkina-Faso", "BI": "Burundi", "BT": "Butan", "CI": "C\u00f4te d\u2019Ivoire", "TD": "\u00c7ad", "CZ": "\u00c7eki", "DK": "Danimark\u00eb", "DM": "Dominik\u00eb", "EG": "Egjipt", "EC": "Ekuador", "AE": "Emiratet e Bashkuara Arabe", "ER": "Eritre", "EE": "Estoni", "SZ": "Esvatini", "ET": "Etiopi", "PH": "Filipine", "FI": "Finland\u00eb", "FJ": "Fixhi", "FR": "Franc\u00eb", "GA": "Gabon", "GM": "Gambi", "GH": "Gan\u00eb", "GG": "Gernsej", "GD": "Granad\u00eb", "GR": "Greqi", "GL": "Gr\u00ebnland\u00eb", "GP": "Guadelup\u00eb", "GF": "Guajana Franceze", "GY": "Guajan\u00eb", "GU": "Guam", "GT": "Guatemal\u00eb", "GN": "Guine", "GW": "Guine-Bisau", "PG": "Guineja e Re-Papua", "GQ": "Guineja Ekuatoriale", "GE": "Gjeorgji", "DE": "Gjermani", "GI": "Gjibraltar", "HT": "Haiti", "NL": "Holand\u00eb", "HN": "Honduras", "HU": "Hungari", "IN": "Indi", "ID": "Indonezi", "IQ": "Irak", "IR": "Iran", "IE": "Irland\u00eb", "IS": "Island\u00eb", "AX": "Ishujt Aland\u00eb", "VG": "Ishujt e Virgj\u00ebr Britanik\u00eb", "VI": "Ishujt e Virgj\u00ebr t\u00eb SHBA-s\u00eb", "FK": "Ishujt Falkland", "FO": "Ishujt Faroe", "HM": "Ishujt H\u00ebrd e Mekdonald", "KY": "Ishujt Kajman", "CC": "Ishujt Kokos", "CK": "Ishujt Kuk", "PN": "Ishujt Pitkern", "SB": "Ishujt Solomon", "TC": "Ishujt Turks dhe Kaikos", "BV": "Ishulli Bove", "CX": "Ishulli i Krishtlindjes", "IM": "Ishulli i Manit", "NF": "Ishulli Norfolk", "IT": "Itali", "IL": "Izrael", "JP": "Japoni", "YE": "Jemen", "JO": "Jordani", "NC": "Kaledoni e Re", "KH": "Kamboxhia", "CM": "Kamerun", "CA": "Kanada", "BQ": "Karaibet holandeze", "QA": "Katar", "KZ": "Kazakistan", "KE": "Kenia", "CV": "Kepi i Gjelb\u00ebr", "CL": "Kili", "CN": "Kin\u00eb", "KG": "Kirgizi", "KI": "Kiribati", "CO": "Kolumbi", "KM": "Komore", "CG": "Kongo-Brazavil\u00eb", "CD": "Kongo-Kinshasa", "KR": "Kore e Jugut", "KP": "Kore e Veriut", "CR": "Kosta-Rik\u00eb", "HR": "Kroaci", "CU": "Kub\u00eb", "CW": "Kurasao", "KW": "Kuvajt", "LA": "Laos", "LS": "Lesoto", "LV": "Letoni", "LB": "Liban", "LR": "Liberi", "LY": "Libi", "LI": "Lihtenshtajn", "LT": "Lituani", "LU": "Luksemburg", "MG": "Madagaskar", "YT": "Majot\u00eb", "ME": "Mal i Zi", "MY": "Malajzi", "MW": "Malavi", "MV": "Maldive", "ML": "Mali", "MT": "Malt\u00eb", "MK": "Maqedonia e Veriut", "MA": "Marok", "MQ": "Martinik\u00eb", "MR": "Mauritani", "MU": "Mauritius", "GB": "Mbret\u00ebria e Bashkuar", "MX": "Meksik\u00eb", "MM": "Mianmar (Burm\u00eb)", "MD": "Moldavi", "MC": "Monako", "MN": "Mongoli", "MS": "Montserat", "MZ": "Mozambik", "NA": "Namibi", "NR": "Nauru", "NP": "Nepal", "NE": "Niger", "NG": "Nigeri", "NI": "Nikaragua", "NU": "Niue", "NO": "Norvegji", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PY": "Paraguai", "PE": "Peru", "PF": "Polinezia Franceze", "PL": "Poloni", "PR": "Porto-Riko", "PT": "Portugali", "CY": "Qipro", "DO": "Republika Dominikane", "CF": "Republika e Afrik\u00ebs Qendrore", "RE": "Reunion", "HK": "RPA i Hong-Kongut", "MO": "RPA i Makaos", "RW": "Ruand\u00eb", "RO": "Rumani", "RU": "Rusi", "EH": "Saharaja Per\u00ebndimore", "SV": "Salvador", "WS": "Samoa", "AS": "Samoa Amerikane", "SM": "San-Marino", "ST": "Sao-Tome e Principe", "SC": "Sejshelle", "BL": "Sen-Bartelemi", "MF": "Sen-Marten", "SN": "Senegal", "RS": "Serbi", "SL": "Sierra-Leone", "SG": "Singapor", "SX": "Sint-Marten", "SY": "Siri", "SK": "Sllovaki", "SI": "Slloveni", "SO": "Somali", "ES": "Spanj\u00eb", "LK": "Sri-Lank\u00eb", "SD": "Sudan", "SS": "Sudani i Jugut", "SE": "Suedi", "SR": "Surinami", "SJ": "Svalbard e Jan-Majen", "US": "SHBA", "SH": "Sh\u00ebn-Elen\u00eb", "KN": "Sh\u00ebn-Kits dhe Nevis", "LC": "Sh\u00ebn-Lu\u00e7ia", "PM": "Sh\u00ebn-Pier dhe Mikelon", "VC": "Sh\u00ebn-Vincent dhe Grenadine", "AL": "Shqip\u00ebri", "TH": "Tajland\u00eb", "TW": "Tajvan", "TZ": "Tanzani", "TJ": "Taxhikistan", "TF": "Territoret Jugore Franceze", "IO": "Territori Britanik i Oqeanit Indian", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad e Tobago", "TN": "Tunizi", "TM": "Turkmenistan", "TR": "Turqi", "UG": "Ugand\u00eb", "UA": "Ukrain\u00eb", "WF": "Uollis e Futuna", "UY": "Uruguai", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatikan", "VE": "Venezuel\u00eb", "VN": "Vietnam", "JM": "Xhamajk\u00eb", "DJ": "Xhibuti", "GS": "Xhorxha Jugore dhe Ishujt Sendui\u00e7\u00eb t\u00eb Jugut", "ZM": "Zambi", "NZ": "Zeland\u00eb e Re", "ZW": "Zimbabve", "CH": "Zvic\u00ebr"}onionshare-2.6.3/desktop/onionshare/resources/countries/sv.json000066400000000000000000000114371475545702100250750ustar00rootroot00000000000000{"AF": "Afghanistan", "AL": "Albanien", "DZ": "Algeriet", "VI": "Amerikanska Jungfru\u00f6arna", "AS": "Amerikanska Samoa", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktis", "AG": "Antigua och Barbuda", "AR": "Argentina", "AM": "Armenien", "AW": "Aruba", "AU": "Australien", "AZ": "Azerbajdzjan", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "BE": "Belgien", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnien och Hercegovina", "BW": "Botswana", "BV": "Bouvet\u00f6n", "BR": "Brasilien", "VG": "Brittiska Jungfru\u00f6arna", "IO": "Brittiska territoriet i Indiska oceanen", "BN": "Brunei", "BG": "Bulgarien", "BF": "Burkina Faso", "BI": "Burundi", "KY": "Cayman\u00f6arna", "CF": "Centralafrikanska republiken", "CL": "Chile", "CO": "Colombia", "CK": "Cook\u00f6arna", "CR": "Costa Rica", "CW": "Cura\u00e7ao", "CY": "Cypern", "CI": "C\u00f4te d\u2019Ivoire", "DK": "Danmark", "DJ": "Djibouti", "DM": "Dominica", "DO": "Dominikanska republiken", "EC": "Ecuador", "EG": "Egypten", "GQ": "Ekvatorialguinea", "SV": "El Salvador", "ER": "Eritrea", "EE": "Estland", "ET": "Etiopien", "FK": "Falklands\u00f6arna", "FJ": "Fiji", "PH": "Filippinerna", "FI": "Finland", "FR": "Frankrike", "GF": "Franska Guyana", "PF": "Franska Polynesien", "TF": "Franska sydterritorierna", "FO": "F\u00e4r\u00f6arna", "AE": "F\u00f6renade Arabemiraten", "GA": "Gabon", "GM": "Gambia", "GE": "Georgien", "GH": "Ghana", "GI": "Gibraltar", "GR": "Grekland", "GD": "Grenada", "GL": "Gr\u00f6nland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heard\u00f6n och McDonald\u00f6arna", "HN": "Honduras", "HK": "Hongkong", "IN": "Indien", "ID": "Indonesien", "IQ": "Irak", "IR": "Iran", "IE": "Irland", "IS": "Island", "IM": "Isle of Man", "IL": "Israel", "IT": "Italien", "JM": "Jamaica", "JP": "Japan", "YE": "Jemen", "JO": "Jordanien", "CX": "Jul\u00f6n", "KH": "Kambodja", "CM": "Kamerun", "CA": "Kanada", "CV": "Kap Verde", "BQ": "Karibiska Nederl\u00e4nderna", "KZ": "Kazakstan", "KE": "Kenya", "CN": "Kina", "KG": "Kirgizistan", "KI": "Kiribati", "CC": "Kokos\u00f6arna", "KM": "Komorerna", "CG": "Kongo-Brazzaville", "CD": "Kongo-Kinshasa", "HR": "Kroatien", "CU": "Kuba", "KW": "Kuwait", "LA": "Laos", "LS": "Lesotho", "LV": "Lettland", "LB": "Libanon", "LR": "Liberia", "LY": "Libyen", "LI": "Liechtenstein", "LT": "Litauen", "LU": "Luxemburg", "MO": "Macao", "MG": "Madagaskar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldiverna", "ML": "Mali", "MT": "Malta", "MA": "Marocko", "MQ": "Martinique", "MR": "Mauretanien", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexiko", "MZ": "Mo\u00e7ambique", "MD": "Moldavien", "MC": "Monaco", "MN": "Mongoliet", "ME": "Montenegro", "MS": "Montserrat", "MM": "Myanmar (Burma)", "NA": "Namibia", "NR": "Nauru", "NL": "Nederl\u00e4nderna", "NP": "Nepal", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "KP": "Nordkorea", "MK": "Nordmakedonien", "NF": "Norfolk\u00f6n", "NO": "Norge", "NC": "Nya Kaledonien", "NZ": "Nya Zeeland", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua Nya Guinea", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairn\u00f6arna", "PL": "Polen", "PT": "Portugal", "PR": "Puerto Rico", "QA": "Qatar", "RE": "R\u00e9union", "RO": "Rum\u00e4nien", "RW": "Rwanda", "RU": "Ryssland", "BL": "S:t Barth\u00e9lemy", "SH": "S:t Helena", "KN": "S:t Kitts och Nevis", "LC": "S:t Lucia", "PM": "S:t Pierre och Miquelon", "VC": "S:t Vincent och Grenadinerna", "MF": "Saint-Martin", "SB": "Salomon\u00f6arna", "WS": "Samoa", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 och Pr\u00edncipe", "SA": "Saudiarabien", "CH": "Schweiz", "SN": "Senegal", "RS": "Serbien", "SC": "Seychellerna", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakien", "SI": "Slovenien", "SO": "Somalia", "ES": "Spanien", "LK": "Sri Lanka", "GB": "Storbritannien", "SD": "Sudan", "SR": "Surinam", "SJ": "Svalbard och Jan Mayen", "SE": "Sverige", "SZ": "Swaziland", "ZA": "Sydafrika", "GS": "Sydgeorgien och Sydsandwich\u00f6arna", "KR": "Sydkorea", "SS": "Sydsudan", "SY": "Syrien", "TJ": "Tadzjikistan", "TW": "Taiwan", "TZ": "Tanzania", "TD": "Tchad", "TH": "Thailand", "CZ": "Tjeckien", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad och Tobago", "TN": "Tunisien", "TR": "Turkiet", "TM": "Turkmenistan", "TC": "Turks- och Caicos\u00f6arna", "DE": "Tyskland", "UG": "Uganda", "UA": "Ukraina", "HU": "Ungern", "UY": "Uruguay", "US": "USA", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatikanstaten", "VE": "Venezuela", "VN": "Vietnam", "BY": "Vitryssland", "EH": "V\u00e4stsahara", "WF": "Wallis- och Futuna\u00f6arna", "ZM": "Zambia", "ZW": "Zimbabwe", "AX": "\u00c5land", "AT": "\u00d6sterrike", "TL": "\u00d6sttimor"}onionshare-2.6.3/desktop/onionshare/resources/countries/sw.json000066400000000000000000000114051475545702100250710ustar00rootroot00000000000000{"AF": "Afghanistan", "ZA": "Afrika Kusini", "IS": "Aisilandi", "AR": "Ajentina", "AL": "Albania", "DZ": "Aljeria", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antaktiki", "AG": "Antigua na Barbuda", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AT": "Austria", "IE": "Ayalandi", "AZ": "Azerbaijani", "BB": "Babadosi", "BS": "Bahama", "BH": "Bahareni", "BD": "Bangladeshi", "BY": "Belarus", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BO": "Bolivia", "BA": "Bosnia na Hezegovina", "BW": "Botswana", "BR": "Brazil", "BN": "Brunei", "BF": "Bukinafaso", "BG": "Bulgaria", "BI": "Burundi", "CV": "Cape Verde", "TD": "Chad", "CZ": "Chechia", "CL": "Chile", "CI": "Cote d\u2019Ivoire", "HR": "Croatia", "CU": "Cuba", "CW": "Curacao", "CY": "Cyprus", "DK": "Denmark", "DM": "Dominika", "EC": "Ecuador", "SV": "El Salvador", "IO": "Eneo la Uingereza katika Bahari Hindi", "ER": "Eritrea", "EE": "Estonia", "ET": "Ethiopia", "AE": "Falme za Kiarabu", "FJ": "Fiji", "GA": "Gabon", "GM": "Gambia", "GH": "Ghana", "GI": "Gibraltar", "GN": "Gine", "GW": "Ginebisau", "GL": "Greenland", "GD": "Grenada", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GF": "Guiana ya Ufaransa", "GQ": "Guinea ya Ikweta", "GY": "Guyana", "HT": "Haiti", "TF": "Himaya za Kusini za Kifaranza", "HN": "Honduras", "HK": "Hong Kong SAR China", "HU": "Hungaria", "IN": "India", "ID": "Indonesia", "IQ": "Iraki", "IR": "Iran", "IL": "Israeli", "IT": "Italia", "JM": "Jamaika", "CF": "Jamhuri ya Afrika ya Kati", "DO": "Jamhuri ya Dominika", "CD": "Jamhuri ya Kidemokrasia ya Kongo", "JP": "Japani", "DJ": "Jibuti", "GE": "Jojia", "JO": "Jordan", "KH": "Kambodia", "CM": "Kameruni", "CA": "Kanada", "KZ": "Kazakistani", "KE": "Kenya", "KI": "Kiribati", "KG": "Kirigizistani", "BV": "Kisiwa cha Bouvet", "HM": "Kisiwa cha Heard na Visiwa vya McDonald", "CX": "Kisiwa cha Krismasi", "IM": "Kisiwa cha Man", "NF": "Kisiwa cha Norfolk", "CO": "Kolombia", "KM": "Komoro", "CG": "Kongo - Brazzaville", "KP": "Korea Kaskazini", "KR": "Korea Kusini", "CR": "Kostarika", "KW": "Kuwait", "LA": "Laos", "LV": "Latvia", "LB": "Lebanon", "LS": "Lesoto", "LR": "Liberia", "LY": "Libya", "LI": "Liechtenstein", "LT": "Lithuania", "LU": "Luxembourg", "MG": "Madagaska", "MO": "Makau SAR China", "MW": "Malawi", "MV": "Maldives", "MY": "Malesia", "ML": "Mali", "MT": "Malta", "US": "Marekani", "MQ": "Martinique", "MK": "Masedonia ya Kaskazini", "YT": "Mayotte", "MX": "Meksiko", "EG": "Misri", "VA": "Mji wa Vatican", "MD": "Moldova", "MC": "Monaco", "MN": "Mongolia", "ME": "Montenegro", "MS": "Montserrat", "MU": "Morisi", "MR": "Moritania", "MA": "Morocco", "MZ": "Msumbiji", "MM": "Myanmar (Burma)", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NC": "New Caledonia", "NE": "Niger", "NG": "Nigeria", "NI": "Nikaragwa", "NU": "Niue", "NO": "Norway", "NZ": "Nyuzilandi", "OM": "Oman", "PK": "Pakistani", "PW": "Palau", "PA": "Panama", "PG": "Papua New Guinea", "PY": "Paraguay", "PE": "Peru", "PL": "Poland", "PF": "Polynesia ya Ufaransa", "PR": "Puerto Rico", "QA": "Qatar", "RE": "Reunion", "RO": "Romania", "RW": "Rwanda", "EH": "Sahara Magharibi", "WS": "Samoa", "AS": "Samoa ya Marekani", "SM": "San Marino", "PM": "Santapierre na Miquelon", "ST": "S\u00e3o Tom\u00e9 na Pr\u00edncipe", "SA": "Saudia", "SN": "Senegali", "RS": "Serbia", "SL": "Siera Leoni", "SG": "Singapore", "SX": "Sint Maarten", "SK": "Slovakia", "SI": "Slovenia", "SO": "Somalia", "LK": "Sri Lanka", "BL": "St. Barthelemy", "SH": "St. Helena", "KN": "St. Kitts na Nevis", "LC": "St. Lucia", "MF": "St. Martin", "VC": "St. Vincent na Grenadines", "SD": "Sudan", "SS": "Sudan Kusini", "SR": "Suriname", "SJ": "Svalbard na Jan Mayen", "SY": "Syria", "TH": "Tailandi", "TW": "Taiwan", "TJ": "Tajikistani", "TZ": "Tanzania", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad na Tobago", "TN": "Tunisia", "TM": "Turkmenistan", "BE": "Ubelgiji", "CN": "Uchina", "GB": "Ufalme wa Muungano", "FR": "Ufaransa", "PH": "Ufilipino", "FI": "Ufini", "UG": "Uganda", "GR": "Ugiriki", "ES": "Uhispania", "NL": "Uholanzi", "BQ": "Uholanzi ya Karibiani", "DE": "Ujerumani", "UA": "Ukraine", "PT": "Ureno", "UY": "Uruguay", "RU": "Urusi", "SC": "Ushelisheli", "SZ": "Uswazi", "SE": "Uswidi", "CH": "Uswisi", "TR": "Uturuki", "UZ": "Uzibekistani", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vietnam", "AX": "Visiwa vya Aland", "KY": "Visiwa vya Cayman", "CC": "Visiwa vya Cocos (Keeling)", "CK": "Visiwa vya Cook", "FK": "Visiwa vya Falkland", "FO": "Visiwa vya Faroe", "GS": "Visiwa vya Georgia Kusini na Sandwich Kusini", "PN": "Visiwa vya Pitcairn", "SB": "Visiwa vya Solomon", "TC": "Visiwa vya Turks na Caicos", "VI": "Visiwa vya Virgin, Marekani", "VG": "Visiwa vya Virgin, Uingereza", "WF": "Wallis na Futuna", "YE": "Yemeni", "ZM": "Zambia", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/ta.json000066400000000000000000000423201475545702100250440ustar00rootroot00000000000000{"AI": "\u0b85\u0b99\u0bcd\u0b95\u0bbf\u0baf\u0bc1\u0bb2\u0bbe", "AO": "\u0b85\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbe", "AZ": "\u0b85\u0b9a\u0bb0\u0bcd\u0baa\u0bc8\u0b9c\u0bbe\u0ba9\u0bcd", "AQ": "\u0b85\u0ba3\u0bcd\u0b9f\u0bbe\u0bb0\u0bcd\u0b9f\u0bbf\u0b95\u0bbe", "AS": "\u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95 \u0b9a\u0bae\u0bcb\u0bb5\u0bbe", "US": "\u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe", "IE": "\u0b85\u0baf\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "AM": "\u0b85\u0bb0\u0bcd\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "AR": "\u0b85\u0bb0\u0bcd\u0b9c\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0ba9\u0bbe", "AW": "\u0b85\u0bb0\u0bc2\u0baa\u0bbe", "AL": "\u0b85\u0bb2\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "DZ": "\u0b85\u0bb2\u0bcd\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe", "AD": "\u0b85\u0ba9\u0bcd\u0b9f\u0bcb\u0bb0\u0bbe", "AF": "\u0b86\u0b83\u0baa\u0bcd\u0b95\u0bbe\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "AG": "\u0b86\u0ba3\u0bcd\u0b9f\u0bbf\u0b95\u0bc1\u0bb5\u0bbe \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bc1\u0b9f\u0bbe", "AX": "\u0b86\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1 \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "AT": "\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bbf\u0baf\u0bbe", "AU": "\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe", "IT": "\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf", "IN": "\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe", "ID": "\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0b9a\u0bbf\u0baf\u0bbe", "LK": "\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8", "IL": "\u0b87\u0bb8\u0bcd\u0bb0\u0bc7\u0bb2\u0bcd", "EC": "\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd", "GQ": "\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bcb\u0bb0\u0bbf\u0baf\u0bb2\u0bcd \u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe", "IQ": "\u0b88\u0bb0\u0bbe\u0b95\u0bcd", "IR": "\u0b88\u0bb0\u0bbe\u0ba9\u0bcd", "UA": "\u0b89\u0b95\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd", "UG": "\u0b89\u0b95\u0bbe\u0ba3\u0bcd\u0b9f\u0bbe", "UY": "\u0b89\u0bb0\u0bc1\u0b95\u0bc1\u0bb5\u0bc7", "UZ": "\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "EG": "\u0b8e\u0b95\u0bbf\u0baa\u0bcd\u0ba4\u0bc1", "ET": "\u0b8e\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bcb\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "ER": "\u0b8e\u0bb0\u0bbf\u0b9f\u0bcd\u0bb0\u0bbf\u0baf\u0bbe", "SV": "\u0b8e\u0bb2\u0bcd \u0b9a\u0bbe\u0bb2\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd", "EE": "\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe", "SZ": "\u0b8e\u0bb8\u0bcd\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc0\u0ba9\u0bbf", "YE": "\u0b8f\u0bae\u0ba9\u0bcd", "AE": "\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bb0\u0baa\u0bc1 \u0b8e\u0bae\u0bbf\u0bb0\u0bc7\u0b9f\u0bcd\u0bb8\u0bcd", "IM": "\u0b90\u0bb2\u0bcd \u0b86\u0b83\u0baa\u0bcd \u0bae\u0bc7\u0ba9\u0bcd", "IS": "\u0b90\u0bb8\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "OM": "\u0b93\u0bae\u0ba9\u0bcd", "FK": "\u0b83\u0baa\u0bbe\u0b95\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1 \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "FO": "\u0b83\u0baa\u0bbe\u0bb0\u0bcb \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "FJ": "\u0b83\u0baa\u0bbf\u0b9c\u0bbf", "GP": "\u0b95\u0bcd\u0bb5\u0bbe\u0ba4\u0bc7\u0bb2\u0bcb\u0baa\u0bcd", "QA": "\u0b95\u0ba4\u0bcd\u0ba4\u0bbe\u0bb0\u0bcd", "KH": "\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0bbe", "GY": "\u0b95\u0baf\u0bbe\u0ba9\u0bbe", "BQ": "\u0b95\u0bb0\u0bc0\u0baa\u0bbf\u0baf\u0ba9\u0bcd \u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "GT": "\u0b95\u0bb5\u0bc1\u0ba4\u0bae\u0bbe\u0bb2\u0bbe", "CA": "\u0b95\u0ba9\u0b9f\u0bbe", "KZ": "\u0b95\u0bb8\u0b95\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "CD": "\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb - \u0b95\u0bbf\u0ba9\u0bcd\u0bb7\u0bbe\u0b9a\u0bbe", "CG": "\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb - \u0baa\u0bcd\u0bb0\u0bbe\u0bb8\u0bbe\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc7", "GM": "\u0b95\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "GH": "\u0b95\u0bbe\u0ba9\u0bbe", "CU": "\u0b95\u0bbf\u0baf\u0bc2\u0baa\u0bbe", "KG": "\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "GD": "\u0b95\u0bbf\u0bb0\u0ba9\u0bc6\u0b9f\u0bbe", "KI": "\u0b95\u0bbf\u0bb0\u0bbf\u0baa\u0bbe\u0b9f\u0bcd\u0b9f\u0bbf", "GL": "\u0b95\u0bbf\u0bb0\u0bc0\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "GR": "\u0b95\u0bbf\u0bb0\u0bc0\u0bb8\u0bcd", "CX": "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bae\u0bb8\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1", "GN": "\u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe", "GW": "\u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe-\u0baa\u0bbf\u0bb8\u0bcd\u0bb8\u0bbe\u0bb5\u0bcd", "CK": "\u0b95\u0bc1\u0b95\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "CW": "\u0b95\u0bc1\u0bb0\u0bbe\u0b95\u0bb5\u0bcd", "HR": "\u0b95\u0bc1\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0bbe", "GU": "\u0b95\u0bc1\u0bb5\u0bbe\u0bae\u0bcd", "KW": "\u0b95\u0bc1\u0bb5\u0bc8\u0ba4\u0bcd", "KY": "\u0b95\u0bc6\u0baf\u0bcd\u0bae\u0bc6\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "GG": "\u0b95\u0bc6\u0bb0\u0bcd\u0ba9\u0bcd\u0b9a\u0bbf", "KE": "\u0b95\u0bc6\u0ba9\u0bcd\u0baf\u0bbe", "CV": "\u0b95\u0bc7\u0baa\u0bcd \u0bb5\u0bc6\u0bb0\u0bcd\u0b9f\u0bc7", "GA": "\u0b95\u0bc7\u0baa\u0bbe\u0ba9\u0bcd", "CM": "\u0b95\u0bc7\u0bae\u0bb0\u0bc2\u0ba9\u0bcd", "CO": "\u0b95\u0bca\u0bb2\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "CC": "\u0b95\u0bcb\u0b95\u0bcb\u0bb8\u0bcd (\u0b95\u0bc0\u0bb2\u0bbf\u0b99\u0bcd) \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "CI": "\u0b95\u0bcb\u0b9f\u0bcd \u0ba4\u0bbf\u2019\u0bb5\u0bbe\u0baf\u0bb0\u0bcd", "KM": "\u0b95\u0bcb\u0bae\u0bb0\u0bcb\u0bb8\u0bcd", "CR": "\u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bbf\u0b95\u0bbe", "WS": "\u0b9a\u0bae\u0bcb\u0bb5\u0bbe", "SA": "\u0b9a\u0bb5\u0bc2\u0ba4\u0bbf \u0b85\u0bb0\u0bc7\u0baa\u0bbf\u0baf\u0bbe", "TD": "\u0b9a\u0bbe\u0b9f\u0bcd", "SB": "\u0b9a\u0bbe\u0bb2\u0bae\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "ST": "\u0b9a\u0bbe\u0bb5\u0bcd \u0ba4\u0bcb\u0bae\u0bcd & \u0baa\u0bcd\u0bb0\u0bbf\u0ba9\u0bcd\u0b9a\u0bbf\u0baa\u0bbf", "SM": "\u0b9a\u0bbe\u0ba9\u0bcd \u0bae\u0bb0\u0bbf\u0ba9\u0bcb", "SG": "\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd", "SL": "\u0b9a\u0bbf\u0baf\u0bbe\u0bb0\u0bbe \u0bb2\u0bbf\u0baf\u0bcb\u0ba9\u0bcd", "SY": "\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe", "CL": "\u0b9a\u0bbf\u0bb2\u0bbf", "SX": "\u0b9a\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bae\u0bbe\u0bb0\u0bcd\u0b9f\u0bc6\u0ba9\u0bcd", "CN": "\u0b9a\u0bc0\u0ba9\u0bbe", "SC": "\u0b9a\u0bc0\u0bb7\u0bc6\u0bb2\u0bcd\u0bb8\u0bcd", "SR": "\u0b9a\u0bc1\u0bb0\u0bbf\u0ba9\u0bbe\u0bae\u0bcd", "SD": "\u0b9a\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd", "CZ": "\u0b9a\u0bc6\u0b9a\u0bbf\u0baf\u0bbe", "KN": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0b95\u0bbf\u0b9f\u0bcd\u0bb8\u0bcd & \u0ba8\u0bc6\u0bb5\u0bbf\u0bb8\u0bcd", "BL": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0baa\u0bbe\u0bb0\u0bcd\u0ba4\u0bc7\u0bb2\u0bc6\u0bae\u0bbf", "PM": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0baa\u0bbf\u0baf\u0bb0\u0bcd & \u0bae\u0bbf\u0b95\u0bcd\u0bb5\u0bc7\u0bb2\u0bbe\u0ba9\u0bcd", "MF": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bae\u0bbe\u0bb0\u0bcd\u0b9f\u0bcd\u0b9f\u0bc0\u0ba9\u0bcd", "LC": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bb2\u0bc2\u0b9a\u0bbf\u0baf\u0bbe", "VC": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bb5\u0bbf\u0ba9\u0bcd\u0b9a\u0bc6\u0ba9\u0bcd\u0b9f\u0bcd & \u0b95\u0bbf\u0bb0\u0bc6\u0ba9\u0b9f\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd", "SH": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bb9\u0bc6\u0bb2\u0bc6\u0ba9\u0bbe", "RS": "\u0b9a\u0bc6\u0bb0\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "SN": "\u0b9a\u0bc6\u0ba9\u0bc6\u0b95\u0bb2\u0bcd", "CY": "\u0b9a\u0bc8\u0baa\u0bcd\u0bb0\u0bb8\u0bcd", "SO": "\u0b9a\u0bcb\u0bae\u0bbe\u0bb2\u0bbf\u0baf\u0bbe", "TC": "\u0b9f\u0bb0\u0bcd\u0b95\u0bcd\u0bb8\u0bcd & \u0b95\u0bc8\u0b95\u0bcb\u0bb8\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "TT": "\u0b9f\u0bbf\u0bb0\u0bbf\u0ba9\u0bbf\u0b9f\u0bbe\u0b9f\u0bcd & \u0b9f\u0bca\u0baa\u0bbe\u0b95\u0bcb", "TN": "\u0b9f\u0bc1\u0ba9\u0bbf\u0b9a\u0bbf\u0baf\u0bbe", "DK": "\u0b9f\u0bc6\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd\u0b95\u0bcd", "DO": "\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0ba9\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1", "DM": "\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0bbe", "TK": "\u0b9f\u0bcb\u0b95\u0bc7\u0bb2\u0bcb", "TG": "\u0b9f\u0bcb\u0b95\u0bcb", "TO": "\u0b9f\u0bcb\u0b99\u0bcd\u0b95\u0bbe", "TJ": "\u0ba4\u0b9c\u0bbf\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "TH": "\u0ba4\u0bbe\u0baf\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "TZ": "\u0ba4\u0bbe\u0ba9\u0bcd\u0b9a\u0bbe\u0ba9\u0bbf\u0baf\u0bbe", "TL": "\u0ba4\u0bbf\u0bae\u0bcb\u0bb0\u0bcd-\u0bb2\u0bc6\u0bb8\u0bcd\u0ba4\u0bc7", "TM": "\u0ba4\u0bc1\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "TR": "\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bbf", "SS": "\u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0b9a\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd", "GS": "\u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0b9a\u0bbe\u0ba3\u0bcd\u0b9f\u0bcd\u0bb5\u0bbf\u0b9a\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "ZA": "\u0ba4\u0bc6\u0ba9\u0bcd \u0b86\u0baa\u0bcd\u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe", "KR": "\u0ba4\u0bc6\u0ba9\u0bcd \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe", "TW": "\u0ba4\u0bc8\u0bb5\u0bbe\u0ba9\u0bcd", "NA": "\u0ba8\u0bae\u0bc0\u0baa\u0bbf\u0baf\u0bbe", "NF": "\u0ba8\u0bbe\u0bb0\u0bcd\u0b83\u0baa\u0bcb\u0b95\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1", "NO": "\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7", "NI": "\u0ba8\u0bbf\u0b95\u0bb0\u0b95\u0bc1\u0bb5\u0bbe", "NU": "\u0ba8\u0bbf\u0baf\u0bc1\u0bb5\u0bc7", "NC": "\u0ba8\u0bbf\u0baf\u0bc2 \u0b95\u0bc7\u0bb2\u0bbf\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe", "NZ": "\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "NL": "\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "NP": "\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd", "NE": "\u0ba8\u0bc8\u0b9c\u0bb0\u0bcd", "NG": "\u0ba8\u0bc8\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe", "NR": "\u0ba8\u0bcc\u0bb0\u0bc1", "BD": "\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bbe\u0ba4\u0bc7\u0bb7\u0bcd", "PG": "\u0baa\u0baa\u0bcd\u0baa\u0bc1\u0bb5\u0bbe \u0ba8\u0bbf\u0baf\u0bc2 \u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe", "PY": "\u0baa\u0bb0\u0bbe\u0b95\u0bc1\u0bb5\u0bc7", "BG": "\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0bbe", "PA": "\u0baa\u0ba9\u0bbe\u0bae\u0bbe", "BH": "\u0baa\u0bb9\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd", "BS": "\u0baa\u0bb9\u0bbe\u0bae\u0bbe\u0bb8\u0bcd", "PK": "\u0baa\u0bbe\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "BB": "\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0b9f\u0bbe\u0bb8\u0bcd", "PW": "\u0baa\u0bbe\u0bb2\u0bcb", "PN": "\u0baa\u0bbf\u0b9f\u0bcd\u0b95\u0bc6\u0baf\u0bcd\u0bb0\u0bcd\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "PR": "\u0baa\u0bbf\u0baf\u0bc2\u0bb0\u0bcd\u0b9f\u0bcb \u0bb0\u0bbf\u0b95\u0bcb", "FR": "\u0baa\u0bbf\u0bb0\u0bbe\u0ba9\u0bcd\u0bb8\u0bcd", "IO": "\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bcd\u0b9f\u0bbf\u0bb7\u0bcd \u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0baa\u0bcd \u0baa\u0bc6\u0bb0\u0bc1\u0b99\u0bcd\u0b95\u0b9f\u0bb2\u0bcd \u0baa\u0bbf\u0bb0\u0ba4\u0bc7\u0b9a\u0bae\u0bcd", "VG": "\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bcd\u0b9f\u0bc0\u0bb7\u0bcd \u0b95\u0ba9\u0bcd\u0ba9\u0bbf\u0ba4\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "GF": "\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1 \u0b95\u0baf\u0bbe\u0ba9\u0bbe", "TF": "\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1 \u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0bb0\u0ba4\u0bc7\u0b9a\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "PF": "\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1 \u0baa\u0bbe\u0bb2\u0bbf\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0bbe", "BR": "\u0baa\u0bbf\u0bb0\u0bc7\u0b9a\u0bbf\u0bb2\u0bcd", "PH": "\u0baa\u0bbf\u0bb2\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd", "FI": "\u0baa\u0bbf\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "BF": "\u0baa\u0bc1\u0bb0\u0bcd\u0b95\u0bbf\u0ba9\u0bbe \u0b83\u0baa\u0bbe\u0bb8\u0bcb", "BI": "\u0baa\u0bc1\u0bb0\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf", "BN": "\u0baa\u0bc1\u0bb0\u0bc1\u0ba9\u0bc7", "BT": "\u0baa\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd", "BM": "\u0baa\u0bc6\u0bb0\u0bcd\u0bae\u0bc1\u0b9f\u0bbe", "PE": "\u0baa\u0bc6\u0bb0\u0bc1", "BE": "\u0baa\u0bc6\u0bb2\u0bcd\u0b9c\u0bbf\u0baf\u0bae\u0bcd", "BY": "\u0baa\u0bc6\u0bb2\u0bbe\u0bb0\u0bb8\u0bcd", "BZ": "\u0baa\u0bc6\u0bb2\u0bbf\u0bb8\u0bcd", "BJ": "\u0baa\u0bc6\u0ba9\u0bbf\u0ba9\u0bcd", "BO": "\u0baa\u0bca\u0bb2\u0bbf\u0bb5\u0bbf\u0baf\u0bbe", "BV": "\u0baa\u0bca\u0bb5\u0bc7\u0b9f\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1", "BW": "\u0baa\u0bcb\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe", "PT": "\u0baa\u0bcb\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bc1\u0b95\u0bcd\u0b95\u0bb2\u0bcd", "PL": "\u0baa\u0bcb\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1", "BA": "\u0baa\u0bcb\u0bb8\u0bcd\u0ba9\u0bbf\u0baf\u0bbe & \u0bb9\u0bc6\u0bb0\u0bcd\u0bb8\u0b95\u0bcb\u0bb5\u0bbf\u0ba9\u0bbe", "MO": "\u0bae\u0b95\u0bbe\u0bb5\u0bcd \u0b8e\u0bb8\u0bcd\u0b8f\u0b86\u0bb0\u0bcd \u0b9a\u0bc0\u0ba9\u0bbe", "MN": "\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0bbe", "MG": "\u0bae\u0b9f\u0b95\u0bbe\u0bb8\u0bcd\u0b95\u0bb0\u0bcd", "CF": "\u0bae\u0ba4\u0bcd\u0ba4\u0bbf\u0baf \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1", "YT": "\u0bae\u0baf\u0bcb\u0b9f\u0bcd", "MW": "\u0bae\u0bb2\u0bbe\u0bb5\u0bbf", "MY": "\u0bae\u0bb2\u0bc7\u0b9a\u0bbf\u0baf\u0bbe", "MS": "\u0bae\u0bbe\u0ba3\u0bcd\u0b9f\u0bcd\u0b9a\u0bc6\u0bb0\u0bbe\u0b9f\u0bcd", "MQ": "\u0bae\u0bbe\u0bb0\u0bcd\u0b9f\u0bbf\u0ba9\u0bbf\u0b95\u0bcd", "MT": "\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbe", "MD": "\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bcb\u0bb5\u0bbe", "MV": "\u0bae\u0bbe\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0bb5\u0bc1", "ML": "\u0bae\u0bbe\u0bb2\u0bbf", "ME": "\u0bae\u0bbe\u0ba9\u0bcd\u0b9f\u0bc7\u0ba9\u0bc6\u0b95\u0bcd\u0bb0\u0bcb", "MM": "\u0bae\u0bbf\u0baf\u0bbe\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd (\u0baa\u0bb0\u0bcd\u0bae\u0bbe)", "MX": "\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb", "EH": "\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc1 \u0b9a\u0bb9\u0bbe\u0bb0\u0bbe", "MZ": "\u0bae\u0bca\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0b95\u0bcd", "MA": "\u0bae\u0bca\u0bb0\u0bbe\u0b95\u0bcd\u0b95\u0bcb", "MU": "\u0bae\u0bca\u0bb0\u0bbf\u0b9a\u0bbf\u0baf\u0bb8\u0bcd", "MC": "\u0bae\u0bca\u0ba9\u0bbe\u0b95\u0bcd\u0b95\u0bcb", "MR": "\u0bae\u0bcc\u0bb0\u0bbf\u0b9f\u0bbe\u0ba9\u0bbf\u0baf\u0bbe", "GB": "\u0baf\u0bc1\u0ba9\u0bc8\u0b9f\u0bc6\u0b9f\u0bcd \u0b95\u0bbf\u0b99\u0bcd\u0b9f\u0bae\u0bcd", "VI": "\u0baf\u0bc2.\u0b8e\u0bb8\u0bcd. \u0b95\u0ba9\u0bcd\u0ba9\u0bbf\u0ba4\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "RU": "\u0bb0\u0bb7\u0bcd\u0baf\u0bbe", "RE": "\u0bb0\u0bc0\u0baf\u0bc2\u0ba9\u0bbf\u0baf\u0ba9\u0bcd", "RO": "\u0bb0\u0bc1\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "RW": "\u0bb0\u0bc1\u0bb5\u0bbe\u0ba3\u0bcd\u0b9f\u0bbe", "LU": "\u0bb2\u0b95\u0bcd\u0bb8\u0bcd\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd\u0b95\u0bcd", "LV": "\u0bb2\u0bbe\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0bbe", "LA": "\u0bb2\u0bbe\u0bb5\u0bcb\u0bb8\u0bcd", "LI": "\u0bb2\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0ba3\u0bcd\u0bb8\u0bcd\u0b9f\u0bc6\u0baf\u0bcd\u0ba9\u0bcd", "LT": "\u0bb2\u0bbf\u0ba4\u0bc1\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "LY": "\u0bb2\u0bbf\u0baa\u0bbf\u0baf\u0bbe", "LS": "\u0bb2\u0bc6\u0b9a\u0bcb\u0ba4\u0bcb", "LB": "\u0bb2\u0bc6\u0baa\u0ba9\u0bbe\u0ba9\u0bcd", "LR": "\u0bb2\u0bc8\u0baa\u0bc0\u0bb0\u0bbf\u0baf\u0bbe", "KP": "\u0bb5\u0b9f \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe", "MK": "\u0bb5\u0b9f\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bbe\u0b9a\u0bbf\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe", "VU": "\u0bb5\u0ba9\u0bc1\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1", "VA": "\u0bb5\u0bbe\u0b9f\u0bbf\u0b95\u0ba9\u0bcd \u0ba8\u0b95\u0bb0\u0bae\u0bcd", "WF": "\u0bb5\u0bbe\u0bb2\u0bbf\u0bb8\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b83\u0baa\u0bc1\u0b9f\u0bc1\u0ba9\u0bbe", "VN": "\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bcd", "VE": "\u0bb5\u0bc6\u0ba9\u0bbf\u0b9a\u0bc1\u0bb2\u0bbe", "JP": "\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bcd", "JM": "\u0b9c\u0bae\u0bc8\u0b95\u0bbe", "ZM": "\u0b9c\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "GE": "\u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe", "GI": "\u0b9c\u0bbf\u0baa\u0bcd\u0bb0\u0bbe\u0bb2\u0bcd\u0b9f\u0bb0\u0bcd", "DJ": "\u0b9c\u0bbf\u0baa\u0bcc\u0b9f\u0bcd\u0b9f\u0bbf", "ZW": "\u0b9c\u0bbf\u0bae\u0bcd\u0baa\u0bbe\u0baa\u0bcd\u0bb5\u0bc7", "DE": "\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bbf", "JO": "\u0b9c\u0bcb\u0bb0\u0bcd\u0b9f\u0bbe\u0ba9\u0bcd", "ES": "\u0bb8\u0bcd\u0baa\u0bc6\u0baf\u0bbf\u0ba9\u0bcd", "SK": "\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbe\u0b95\u0bbf\u0baf\u0bbe", "SI": "\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "SJ": "\u0bb8\u0bcd\u0bb5\u0bb2\u0bcd\u0baa\u0bbe\u0bb0\u0bcd\u0b9f\u0bc1 & \u0b9c\u0bbe\u0ba9\u0bcd \u0bae\u0bc7\u0baf\u0ba9\u0bcd", "CH": "\u0bb8\u0bcd\u0bb5\u0bbf\u0b9f\u0bcd\u0b9a\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "SE": "\u0bb8\u0bcd\u0bb5\u0bc0\u0b9f\u0ba9\u0bcd", "HU": "\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf", "HK": "\u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0b8e\u0bb8\u0bcd\u0b8f\u0b86\u0bb0\u0bcd \u0b9a\u0bc0\u0ba9\u0bbe", "HM": "\u0bb9\u0bc7\u0bb0\u0bcd\u0b9f\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bae\u0bc6\u0b95\u0bcd\u0b9f\u0bca\u0ba9\u0bbe\u0bb2\u0bcd\u0b9f\u0bc1 \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "HT": "\u0bb9\u0bc8\u0b9f\u0bcd\u0b9f\u0bbf", "HN": "\u0bb9\u0bcb\u0ba3\u0bcd\u0b9f\u0bc2\u0bb0\u0bbe\u0bb8\u0bcd"}onionshare-2.6.3/desktop/onionshare/resources/countries/tr.json000066400000000000000000000121301475545702100250610ustar00rootroot00000000000000{"VI": "ABD Virjin Adalar\u0131", "AF": "Afganistan", "AX": "\u00c5land Adalar\u0131", "DE": "Almanya", "US": "Amerika Birle\u015fik Devletleri", "AS": "Amerikan Samoas\u0131", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarktika", "AG": "Antigua ve Barbuda", "AR": "Arjantin", "AL": "Arnavutluk", "AW": "Aruba", "AU": "Avustralya", "AT": "Avusturya", "AZ": "Azerbaycan", "BS": "Bahamalar", "BH": "Bahreyn", "BD": "Banglade\u015f", "BB": "Barbados", "EH": "Bat\u0131 Sahra", "BY": "Belarus", "BE": "Bel\u00e7ika", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "AE": "Birle\u015fik Arap Emirlikleri", "GB": "Birle\u015fik Krall\u0131k", "BO": "Bolivya", "BA": "Bosna-Hersek", "BW": "Botsvana", "BV": "Bouvet Adas\u0131", "BR": "Brezilya", "IO": "Britanya Hint Okyanusu Topraklar\u0131", "VG": "Britanya Virjin Adalar\u0131", "BN": "Brunei", "BG": "Bulgaristan", "BF": "Burkina Faso", "BI": "Burundi", "BT": "Butan", "CV": "Cape Verde", "KY": "Cayman Adalar\u0131", "GI": "Cebelitar\u0131k", "DZ": "Cezayir", "CX": "Christmas Adas\u0131", "DJ": "Cibuti", "CC": "Cocos (Keeling) Adalar\u0131", "CK": "Cook Adalar\u0131", "CI": "C\u00f4te d\u2019Ivoire", "CW": "Cura\u00e7ao", "TD": "\u00c7ad", "CZ": "\u00c7ekya", "CN": "\u00c7in", "HK": "\u00c7in Hong Kong \u00d6\u0130B", "MO": "\u00c7in Makao \u00d6\u0130B", "DK": "Danimarka", "DO": "Dominik Cumhuriyeti", "DM": "Dominika", "EC": "Ekvador", "GQ": "Ekvator Ginesi", "SV": "El Salvador", "ID": "Endonezya", "ER": "Eritre", "AM": "Ermenistan", "EE": "Estonya", "SZ": "Esvatini", "ET": "Etiyopya", "FK": "Falkland Adalar\u0131", "FO": "Faroe Adalar\u0131", "MA": "Fas", "FJ": "Fiji", "PH": "Filipinler", "FI": "Finlandiya", "FR": "Fransa", "GF": "Frans\u0131z Guyanas\u0131", "TF": "Frans\u0131z G\u00fcney Topraklar\u0131", "PF": "Frans\u0131z Polinezyas\u0131", "GA": "Gabon", "GM": "Gambiya", "GH": "Gana", "GN": "Gine", "GW": "Gine-Bissau", "GD": "Grenada", "GL": "Gr\u00f6nland", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GY": "Guyana", "ZA": "G\u00fcney Afrika", "GS": "G\u00fcney Georgia ve G\u00fcney Sandwich Adalar\u0131", "KR": "G\u00fcney Kore", "SS": "G\u00fcney Sudan", "GE": "G\u00fcrcistan", "HT": "Haiti", "HM": "Heard Adas\u0131 ve McDonald Adalar\u0131", "HR": "H\u0131rvatistan", "IN": "Hindistan", "NL": "Hollanda", "HN": "Honduras", "IQ": "Irak", "IR": "\u0130ran", "IE": "\u0130rlanda", "ES": "\u0130spanya", "IL": "\u0130srail", "SE": "\u0130sve\u00e7", "CH": "\u0130svi\u00e7re", "IT": "\u0130talya", "IS": "\u0130zlanda", "JM": "Jamaika", "JP": "Japonya", "KH": "Kambo\u00e7ya", "CM": "Kamerun", "CA": "Kanada", "ME": "Karada\u011f", "BQ": "Karayip Hollandas\u0131", "QA": "Katar", "KZ": "Kazakistan", "KE": "Kenya", "CY": "K\u0131br\u0131s", "KG": "K\u0131rg\u0131zistan", "KI": "Kiribati", "CO": "Kolombiya", "KM": "Komorlar", "CG": "Kongo - Brazavil", "CD": "Kongo - Kin\u015fasa", "CR": "Kosta Rika", "KW": "Kuveyt", "KP": "Kuzey Kore", "MK": "Kuzey Makedonya", "CU": "K\u00fcba", "LA": "Laos", "LS": "Lesotho", "LV": "Letonya", "LR": "Liberya", "LY": "Libya", "LI": "Liechtenstein", "LT": "Litvanya", "LB": "L\u00fcbnan", "LU": "L\u00fcksemburg", "HU": "Macaristan", "MG": "Madagaskar", "MW": "Malavi", "MV": "Maldivler", "MY": "Malezya", "ML": "Mali", "MT": "Malta", "IM": "Man Adas\u0131", "MQ": "Martinik", "MU": "Mauritius", "YT": "Mayotte", "MX": "Meksika", "EG": "M\u0131s\u0131r", "MN": "Mo\u011folistan", "MD": "Moldova", "MC": "Monako", "MS": "Montserrat", "MR": "Moritanya", "MZ": "Mozambik", "MM": "Myanmar (Burma)", "NA": "Namibya", "NR": "Nauru", "NP": "Nepal", "NE": "Nijer", "NG": "Nijerya", "NI": "Nikaragua", "NU": "Niue", "NF": "Norfolk Adas\u0131", "NO": "Norve\u00e7", "CF": "Orta Afrika Cumhuriyeti", "UZ": "\u00d6zbekistan", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua Yeni Gine", "PY": "Paraguay", "PE": "Peru", "PN": "Pitcairn Adalar\u0131", "PL": "Polonya", "PT": "Portekiz", "PR": "Porto Riko", "RE": "Reunion", "RO": "Romanya", "RW": "Ruanda", "RU": "Rusya", "BL": "Saint Barthelemy", "SH": "Saint Helena", "KN": "Saint Kitts ve Nevis", "LC": "Saint Lucia", "MF": "Saint Martin", "PM": "Saint Pierre ve Miquelon", "VC": "Saint Vincent ve Grenadinler", "WS": "Samoa", "SM": "San Marino", "ST": "Sao Tome ve Principe", "SN": "Senegal", "SC": "Sey\u015feller", "RS": "S\u0131rbistan", "SL": "Sierra Leone", "SG": "Singapur", "SX": "Sint Maarten", "SK": "Slovakya", "SI": "Slovenya", "SB": "Solomon Adalar\u0131", "SO": "Somali", "LK": "Sri Lanka", "SD": "Sudan", "SR": "Surinam", "SY": "Suriye", "SA": "Suudi Arabistan", "SJ": "Svalbard ve Jan Mayen", "CL": "\u015eili", "TJ": "Tacikistan", "TZ": "Tanzanya", "TH": "Tayland", "TW": "Tayvan", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad ve Tobago", "TN": "Tunus", "TC": "Turks ve Caicos Adalar\u0131", "TR": "T\u00fcrkiye", "TM": "T\u00fcrkmenistan", "UG": "Uganda", "UA": "Ukrayna", "OM": "Umman", "UY": "Uruguay", "JO": "\u00dcrd\u00fcn", "VU": "Vanuatu", "VA": "Vatikan", "VE": "Venezuela", "VN": "Vietnam", "WF": "Wallis ve Futuna", "YE": "Yemen", "NC": "Yeni Kaledonya", "NZ": "Yeni Zelanda", "GR": "Yunanistan", "ZM": "Zambiya", "ZW": "Zimbabve"}onionshare-2.6.3/desktop/onionshare/resources/countries/uk.json000066400000000000000000000402631475545702100250630ustar00rootroot00000000000000{"AU": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0456\u044f", "AT": "\u0410\u0432\u0441\u0442\u0440\u0456\u044f", "AZ": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "AX": "\u0410\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "AL": "\u0410\u043b\u0431\u0430\u043d\u0456\u044f", "DZ": "\u0410\u043b\u0436\u0438\u0440", "AS": "\u0410\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0435 \u0421\u0430\u043c\u043e\u0430", "AO": "\u0410\u043d\u0433\u043e\u043b\u0430", "AI": "\u0410\u043d\u0491\u0456\u043b\u044c\u044f", "AD": "\u0410\u043d\u0434\u043e\u0440\u0440\u0430", "AQ": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u043a\u0430", "AG": "\u0410\u043d\u0442\u0438\u0491\u0443\u0430 \u0456 \u0411\u0430\u0440\u0431\u0443\u0434\u0430", "AR": "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "AW": "\u0410\u0440\u0443\u0431\u0430", "AF": "\u0410\u0444\u0433\u0430\u043d\u0456\u0441\u0442\u0430\u043d", "BS": "\u0411\u0430\u0433\u0430\u043c\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "BD": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "BB": "\u0411\u0430\u0440\u0431\u0430\u0434\u043e\u0441", "BH": "\u0411\u0430\u0445\u0440\u0435\u0439\u043d", "BZ": "\u0411\u0435\u043b\u0456\u0437", "BE": "\u0411\u0435\u043b\u044c\u0491\u0456\u044f", "BJ": "\u0411\u0435\u043d\u0456\u043d", "BM": "\u0411\u0435\u0440\u043c\u0443\u0434\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "BY": "\u0411\u0456\u043b\u043e\u0440\u0443\u0441\u044c", "BG": "\u0411\u043e\u043b\u0433\u0430\u0440\u0456\u044f", "BO": "\u0411\u043e\u043b\u0456\u0432\u0456\u044f", "BA": "\u0411\u043e\u0441\u043d\u0456\u044f \u0456 \u0413\u0435\u0440\u0446\u0435\u0491\u043e\u0432\u0438\u043d\u0430", "BW": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "BR": "\u0411\u0440\u0430\u0437\u0456\u043b\u0456\u044f", "IO": "\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0430 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u044f \u0432 \u0406\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u043e\u043c\u0443 \u041e\u043a\u0435\u0430\u043d\u0456", "VG": "\u0411\u0440\u0438\u0442\u0430\u043d\u0441\u044c\u043a\u0456 \u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "BN": "\u0411\u0440\u0443\u043d\u0435\u0439", "BF": "\u0411\u0443\u0440\u043a\u0456\u043d\u0430-\u0424\u0430\u0441\u043e", "BI": "\u0411\u0443\u0440\u0443\u043d\u0434\u0456", "BT": "\u0411\u0443\u0442\u0430\u043d", "VU": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "VA": "\u0412\u0430\u0442\u0438\u043a\u0430\u043d", "GB": "\u0412\u0435\u043b\u0438\u043a\u0430 \u0411\u0440\u0438\u0442\u0430\u043d\u0456\u044f", "VE": "\u0412\u0435\u043d\u0435\u0441\u0443\u0435\u043b\u0430", "VI": "\u0412\u0456\u0440\u0433\u0456\u043d\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438, \u0421\u0428\u0410", "AM": "\u0412\u0456\u0440\u043c\u0435\u043d\u0456\u044f", "VN": "\u0412\u02bc\u0454\u0442\u043d\u0430\u043c", "GA": "\u0413\u0430\u0431\u043e\u043d", "HT": "\u0413\u0430\u0457\u0442\u0456", "GM": "\u0413\u0430\u043c\u0431\u0456\u044f", "GH": "\u0413\u0430\u043d\u0430", "GN": "\u0413\u0432\u0456\u043d\u0435\u044f", "GW": "\u0413\u0432\u0456\u043d\u0435\u044f-\u0411\u0456\u0441\u0430\u0443", "HN": "\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "HK": "\u0413\u043e\u043d\u043a\u043e\u043d\u0433, \u041e.\u0410.\u0420. \u041a\u0438\u0442\u0430\u044e", "GR": "\u0413\u0440\u0435\u0446\u0456\u044f", "GE": "\u0413\u0440\u0443\u0437\u0456\u044f", "GY": "\u0490\u0430\u0439\u0430\u043d\u0430", "GP": "\u0490\u0432\u0430\u0434\u0435\u043b\u0443\u043f\u0430", "GT": "\u0490\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "GG": "\u0490\u0435\u0440\u043d\u0441\u0456", "GI": "\u0490\u0456\u0431\u0440\u0430\u043b\u0442\u0430\u0440", "GD": "\u0490\u0440\u0435\u043d\u0430\u0434\u0430", "GL": "\u0490\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0456\u044f", "GU": "\u0490\u0443\u0430\u043c", "DK": "\u0414\u0430\u043d\u0456\u044f", "DJ": "\u0414\u0436\u0438\u0431\u0443\u0442\u0456", "DM": "\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430", "DO": "\u0414\u043e\u043c\u0456\u043d\u0456\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", "EC": "\u0415\u043a\u0432\u0430\u0434\u043e\u0440", "GQ": "\u0415\u043a\u0432\u0430\u0442\u043e\u0440\u0456\u0430\u043b\u044c\u043d\u0430 \u0413\u0432\u0456\u043d\u0435\u044f", "ER": "\u0415\u0440\u0438\u0442\u0440\u0435\u044f", "SZ": "\u0415\u0441\u0432\u0430\u0442\u0456\u043d\u0456", "EE": "\u0415\u0441\u0442\u043e\u043d\u0456\u044f", "ET": "\u0415\u0444\u0456\u043e\u043f\u0456\u044f", "EG": "\u0404\u0433\u0438\u043f\u0435\u0442", "YE": "\u0404\u043c\u0435\u043d", "ZM": "\u0417\u0430\u043c\u0431\u0456\u044f", "EH": "\u0417\u0430\u0445\u0456\u0434\u043d\u0430 \u0421\u0430\u0445\u0430\u0440\u0430", "ZW": "\u0417\u0456\u043c\u0431\u0430\u0431\u0432\u0435", "IL": "\u0406\u0437\u0440\u0430\u0457\u043b\u044c", "IN": "\u0406\u043d\u0434\u0456\u044f", "ID": "\u0406\u043d\u0434\u043e\u043d\u0435\u0437\u0456\u044f", "IQ": "\u0406\u0440\u0430\u043a", "IR": "\u0406\u0440\u0430\u043d", "IE": "\u0406\u0440\u043b\u0430\u043d\u0434\u0456\u044f", "IS": "\u0406\u0441\u043b\u0430\u043d\u0434\u0456\u044f", "ES": "\u0406\u0441\u043f\u0430\u043d\u0456\u044f", "IT": "\u0406\u0442\u0430\u043b\u0456\u044f", "JO": "\u0419\u043e\u0440\u0434\u0430\u043d\u0456\u044f", "CV": "\u041a\u0430\u0431\u043e-\u0412\u0435\u0440\u0434\u0435", "KZ": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "KY": "\u041a\u0430\u0439\u043c\u0430\u043d\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "KH": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "CM": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "CA": "\u041a\u0430\u043d\u0430\u0434\u0430", "QA": "\u041a\u0430\u0442\u0430\u0440", "KE": "\u041a\u0435\u043d\u0456\u044f", "KG": "\u041a\u0438\u0440\u0433\u0438\u0437\u0441\u0442\u0430\u043d", "CN": "\u041a\u0438\u0442\u0430\u0439", "CY": "\u041a\u0456\u043f\u0440", "KI": "\u041a\u0456\u0440\u0456\u0431\u0430\u0442\u0456", "CC": "\u041a\u043e\u043a\u043e\u0441\u043e\u0432\u0456 (\u041a\u0456\u043b\u0456\u043d\u0491) \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "CO": "\u041a\u043e\u043b\u0443\u043c\u0431\u0456\u044f", "KM": "\u041a\u043e\u043c\u043e\u0440\u0438", "CG": "\u041a\u043e\u043d\u0433\u043e \u2013 \u0411\u0440\u0430\u0437\u0437\u0430\u0432\u0456\u043b\u044c", "CD": "\u041a\u043e\u043d\u0433\u043e \u2013 \u041a\u0456\u043d\u0448\u0430\u0441\u0430", "CR": "\u041a\u043e\u0441\u0442\u0430-\u0420\u0456\u043a\u0430", "CI": "\u041a\u043e\u0442-\u0434\u02bc\u0406\u0432\u0443\u0430\u0440", "CU": "\u041a\u0443\u0431\u0430", "KW": "\u041a\u0443\u0432\u0435\u0439\u0442", "CW": "\u041a\u044e\u0440\u0430\u0441\u0430\u043e", "LA": "\u041b\u0430\u043e\u0441", "LV": "\u041b\u0430\u0442\u0432\u0456\u044f", "LS": "\u041b\u0435\u0441\u043e\u0442\u043e", "LT": "\u041b\u0438\u0442\u0432\u0430", "LR": "\u041b\u0456\u0431\u0435\u0440\u0456\u044f", "LB": "\u041b\u0456\u0432\u0430\u043d", "LY": "\u041b\u0456\u0432\u0456\u044f", "LI": "\u041b\u0456\u0445\u0442\u0435\u043d\u0448\u0442\u0435\u0439\u043d", "LU": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0491", "MR": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0456\u044f", "MU": "\u041c\u0430\u0432\u0440\u0456\u043a\u0456\u0439", "MG": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "YT": "\u041c\u0430\u0439\u043e\u0442\u0442\u0430", "MO": "\u041c\u0430\u043a\u0430\u043e, \u041e.\u0410.\u0420 \u041a\u0438\u0442\u0430\u044e", "MW": "\u041c\u0430\u043b\u0430\u0432\u0456", "MY": "\u041c\u0430\u043b\u0430\u0439\u0437\u0456\u044f", "ML": "\u041c\u0430\u043b\u0456", "MV": "\u041c\u0430\u043b\u044c\u0434\u0456\u0432\u0438", "MT": "\u041c\u0430\u043b\u044c\u0442\u0430", "MA": "\u041c\u0430\u0440\u043e\u043a\u043a\u043e", "MQ": "\u041c\u0430\u0440\u0442\u0456\u043d\u0456\u043a\u0430", "MX": "\u041c\u0435\u043a\u0441\u0438\u043a\u0430", "MZ": "\u041c\u043e\u0437\u0430\u043c\u0431\u0456\u043a", "MD": "\u041c\u043e\u043b\u0434\u043e\u0432\u0430", "MC": "\u041c\u043e\u043d\u0430\u043a\u043e", "MN": "\u041c\u043e\u043d\u0433\u043e\u043b\u0456\u044f", "MS": "\u041c\u043e\u043d\u0442\u0441\u0435\u0440\u0440\u0430\u0442", "MM": "\u041c\u02bc\u044f\u043d\u043c\u0430 (\u0411\u0456\u0440\u043c\u0430)", "NA": "\u041d\u0430\u043c\u0456\u0431\u0456\u044f", "NR": "\u041d\u0430\u0443\u0440\u0443", "NP": "\u041d\u0435\u043f\u0430\u043b", "NE": "\u041d\u0456\u0433\u0435\u0440", "NG": "\u041d\u0456\u0433\u0435\u0440\u0456\u044f", "NL": "\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0438", "BQ": "\u041d\u0456\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u0441\u044c\u043a\u0456 \u041a\u0430\u0440\u0438\u0431\u0441\u044c\u043a\u0456 \u043e\u0441\u0442\u0440\u043e\u0432\u0438", "NI": "\u041d\u0456\u043a\u0430\u0440\u0430\u0491\u0443\u0430", "DE": "\u041d\u0456\u043c\u0435\u0447\u0447\u0438\u043d\u0430", "NU": "\u041d\u0456\u0443\u0435", "NZ": "\u041d\u043e\u0432\u0430 \u0417\u0435\u043b\u0430\u043d\u0434\u0456\u044f", "NC": "\u041d\u043e\u0432\u0430 \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0456\u044f", "NO": "\u041d\u043e\u0440\u0432\u0435\u0491\u0456\u044f", "AE": "\u041e\u0431\u02bc\u0454\u0434\u043d\u0430\u043d\u0456 \u0410\u0440\u0430\u0431\u0441\u044c\u043a\u0456 \u0415\u043c\u0456\u0440\u0430\u0442\u0438", "OM": "\u041e\u043c\u0430\u043d", "BV": "\u041e\u0441\u0442\u0440\u0456\u0432 \u0411\u0443\u0432\u0435", "IM": "\u041e\u0441\u0442\u0440\u0456\u0432 \u041c\u0435\u043d", "NF": "\u041e\u0441\u0442\u0440\u0456\u0432 \u041d\u043e\u0440\u0444\u043e\u043b\u043a", "CX": "\u041e\u0441\u0442\u0440\u0456\u0432 \u0420\u0456\u0437\u0434\u0432\u0430", "SH": "\u041e\u0441\u0442\u0440\u0456\u0432 \u0421\u0432\u044f\u0442\u043e\u0457 \u0404\u043b\u0435\u043d\u0438", "HM": "\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u0413\u0435\u0440\u0434 \u0456 \u041c\u0430\u043a\u0434\u043e\u043d\u0430\u043b\u0434", "CK": "\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041a\u0443\u043a\u0430", "PN": "\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u041f\u0456\u0442\u043a\u0435\u0440\u043d", "TC": "\u041e\u0441\u0442\u0440\u043e\u0432\u0438 \u0422\u0435\u0440\u043a\u0441 \u0456 \u041a\u0430\u0439\u043a\u043e\u0441", "PK": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "PW": "\u041f\u0430\u043b\u0430\u0443", "PA": "\u041f\u0430\u043d\u0430\u043c\u0430", "PG": "\u041f\u0430\u043f\u0443\u0430-\u041d\u043e\u0432\u0430 \u0490\u0432\u0456\u043d\u0435\u044f", "PY": "\u041f\u0430\u0440\u0430\u0491\u0432\u0430\u0439", "PE": "\u041f\u0435\u0440\u0443", "GS": "\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u0414\u0436\u043e\u0440\u0434\u0436\u0456\u044f \u0442\u0430 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0456 \u0421\u0430\u043d\u0434\u0432\u0456\u0447\u0435\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "KR": "\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0430 \u041a\u043e\u0440\u0435\u044f", "SS": "\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0438\u0439 \u0421\u0443\u0434\u0430\u043d", "ZA": "\u041f\u0456\u0432\u0434\u0435\u043d\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", "KP": "\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u041a\u043e\u0440\u0435\u044f", "MK": "\u041f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0456\u044f", "PL": "\u041f\u043e\u043b\u044c\u0449\u0430", "PT": "\u041f\u043e\u0440\u0442\u0443\u0491\u0430\u043b\u0456\u044f", "PR": "\u041f\u0443\u0435\u0440\u0442\u043e-\u0420\u0456\u043a\u043e", "RE": "\u0420\u0435\u044e\u043d\u044c\u0439\u043e\u043d", "RU": "\u0420\u043e\u0441\u0456\u044f", "RW": "\u0420\u0443\u0430\u043d\u0434\u0430", "RO": "\u0420\u0443\u043c\u0443\u043d\u0456\u044f", "SV": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "WS": "\u0421\u0430\u043c\u043e\u0430", "SM": "\u0421\u0430\u043d-\u041c\u0430\u0440\u0456\u043d\u043e", "ST": "\u0421\u0430\u043d-\u0422\u043e\u043c\u0435 \u0456 \u041f\u0440\u0456\u043d\u0441\u0456\u043f\u0456", "SA": "\u0421\u0430\u0443\u0434\u0456\u0432\u0441\u044c\u043a\u0430 \u0410\u0440\u0430\u0432\u0456\u044f", "SC": "\u0421\u0435\u0439\u0448\u0435\u043b\u044c\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "BL": "\u0421\u0435\u043d-\u0411\u0430\u0440\u0442\u0435\u043b\u044c\u043c\u0456", "MF": "\u0421\u0435\u043d-\u041c\u0430\u0440\u0442\u0435\u043d", "PM": "\u0421\u0435\u043d-\u041f\u02bc\u0454\u0440 \u0456 \u041c\u0456\u043a\u0435\u043b\u043e\u043d", "SN": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "VC": "\u0421\u0435\u043d\u0442-\u0412\u0456\u043d\u0441\u0435\u043d\u0442 \u0456 \u0490\u0440\u0435\u043d\u0430\u0434\u0456\u043d\u0438", "KN": "\u0421\u0435\u043d\u0442-\u041a\u0456\u0442\u0441 \u0456 \u041d\u0435\u0432\u0456\u0441", "LC": "\u0421\u0435\u043d\u0442-\u041b\u044e\u0441\u0456\u044f", "RS": "\u0421\u0435\u0440\u0431\u0456\u044f", "SY": "\u0421\u0438\u0440\u0456\u044f", "SG": "\u0421\u0456\u043d\u0433\u0430\u043f\u0443\u0440", "SX": "\u0421\u0456\u043d\u0442-\u041c\u0430\u0440\u0442\u0435\u043d", "SK": "\u0421\u043b\u043e\u0432\u0430\u0447\u0447\u0438\u043d\u0430", "SI": "\u0421\u043b\u043e\u0432\u0435\u043d\u0456\u044f", "SB": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "SO": "\u0421\u043e\u043c\u0430\u043b\u0456", "US": "\u0421\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0456 \u0428\u0442\u0430\u0442\u0438", "SD": "\u0421\u0443\u0434\u0430\u043d", "SR": "\u0421\u0443\u0440\u0456\u043d\u0430\u043c", "SL": "\u0421\u044c\u0454\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435", "TJ": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "TH": "\u0422\u0430\u0457\u043b\u0430\u043d\u0434", "TW": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "TZ": "\u0422\u0430\u043d\u0437\u0430\u043d\u0456\u044f", "TL": "\u0422\u0456\u043c\u043e\u0440-\u041b\u0435\u0448\u0442\u0456", "TG": "\u0422\u043e\u0433\u043e", "TK": "\u0422\u043e\u043a\u0435\u043b\u0430\u0443", "TO": "\u0422\u043e\u043d\u0491\u0430", "TT": "\u0422\u0440\u0456\u043d\u0456\u0434\u0430\u0434 \u0456 \u0422\u043e\u0431\u0430\u0491\u043e", "TN": "\u0422\u0443\u043d\u0456\u0441", "TR": "\u0422\u0443\u0440\u0435\u0447\u0447\u0438\u043d\u0430", "TM": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0456\u0441\u0442\u0430\u043d", "UG": "\u0423\u0433\u0430\u043d\u0434\u0430", "HU": "\u0423\u0433\u043e\u0440\u0449\u0438\u043d\u0430", "UZ": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "UA": "\u0423\u043a\u0440\u0430\u0457\u043d\u0430", "WF": "\u0423\u043e\u043b\u043b\u0456\u0441 \u0456 \u0424\u0443\u0442\u0443\u043d\u0430", "UY": "\u0423\u0440\u0443\u0491\u0432\u0430\u0439", "FO": "\u0424\u0430\u0440\u0435\u0440\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "FJ": "\u0424\u0456\u0434\u0436\u0456", "PH": "\u0424\u0456\u043b\u0456\u043f\u043f\u0456\u043d\u0438", "FI": "\u0424\u0456\u043d\u043b\u044f\u043d\u0434\u0456\u044f", "FK": "\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u044c\u043a\u0456 \u041e\u0441\u0442\u0440\u043e\u0432\u0438", "FR": "\u0424\u0440\u0430\u043d\u0446\u0456\u044f", "GF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430 \u0490\u0432\u0456\u0430\u043d\u0430", "PF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0430 \u041f\u043e\u043b\u0456\u043d\u0435\u0437\u0456\u044f", "TF": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u0456 \u041f\u0456\u0432\u0434\u0435\u043d\u043d\u0456 \u0422\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u0457", "HR": "\u0425\u043e\u0440\u0432\u0430\u0442\u0456\u044f", "CF": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u044c\u043a\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0456\u043a\u0430", "TD": "\u0427\u0430\u0434", "CZ": "\u0427\u0435\u0445\u0456\u044f", "CL": "\u0427\u0456\u043b\u0456", "ME": "\u0427\u043e\u0440\u043d\u043e\u0433\u043e\u0440\u0456\u044f", "CH": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0456\u044f", "SE": "\u0428\u0432\u0435\u0446\u0456\u044f", "SJ": "\u0428\u043f\u0456\u0446\u0431\u0435\u0440\u0433\u0435\u043d \u0442\u0430 \u042f\u043d-\u041c\u0430\u0454\u043d", "LK": "\u0428\u0440\u0456-\u041b\u0430\u043d\u043a\u0430", "JM": "\u042f\u043c\u0430\u0439\u043a\u0430", "JP": "\u042f\u043f\u043e\u043d\u0456\u044f"}onionshare-2.6.3/desktop/onionshare/resources/countries/vi.json000066400000000000000000000127121475545702100250600ustar00rootroot00000000000000{"SA": "\u1ea2 R\u1eadp X\u00ea-\u00fat", "AF": "Afghanistan", "EG": "Ai C\u1eadp", "AL": "Albania", "DZ": "Algeria", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AG": "Antigua v\u00e0 Barbuda", "AT": "\u00c1o", "AR": "Argentina", "AM": "Armenia", "AW": "Aruba", "AU": "Australia", "AZ": "Azerbaijan", "IN": "\u1ea4n \u0110\u1ed9", "PL": "Ba Lan", "BS": "Bahamas", "BH": "Bahrain", "BD": "Bangladesh", "BB": "Barbados", "MK": "B\u1eafc Macedonia", "BY": "Belarus", "BZ": "Belize", "BJ": "Benin", "BM": "Bermuda", "BT": "Bhutan", "BE": "B\u1ec9", "BO": "Bolivia", "BA": "Bosnia v\u00e0 Herzegovina", "BW": "Botswana", "PT": "B\u1ed3 \u0110\u00e0o Nha", "BR": "Brazil", "BN": "Brunei", "BG": "Bulgaria", "BF": "Burkina Faso", "BI": "Burundi", "BQ": "Ca-ri-b\u00ea H\u00e0 Lan", "AE": "C\u00e1c Ti\u1ec3u V\u01b0\u01a1ng qu\u1ed1c \u1ea2 R\u1eadp Th\u1ed1ng nh\u1ea5t", "CM": "Cameroon", "KH": "Campuchia", "CA": "Canada", "CV": "Cape Verde", "TD": "Chad", "CL": "Chile", "CO": "Colombia", "KM": "Comoros", "CG": "Congo - Brazzaville", "CD": "Congo - Kinshasa", "CR": "Costa Rica", "DO": "C\u1ed9ng h\u00f2a Dominica", "CF": "C\u1ed9ng h\u00f2a Trung Phi", "CI": "C\u00f4te d\u2019Ivoire", "HR": "Croatia", "CU": "Cuba", "CW": "Cura\u00e7ao", "DJ": "Djibouti", "DM": "Dominica", "TW": "\u0110\u00e0i Loan", "DK": "\u0110an M\u1ea1ch", "BV": "\u0110\u1ea3o Bouvet", "CX": "\u0110\u1ea3o Gi\u00e1ng Sinh", "IM": "\u0110\u1ea3o Man", "NF": "\u0110\u1ea3o Norfolk", "DE": "\u0110\u1ee9c", "EC": "Ecuador", "SV": "El Salvador", "ER": "Eritrea", "EE": "Estonia", "ET": "Ethiopia", "FJ": "Fiji", "GA": "Gabon", "GM": "Gambia", "GE": "Georgia", "GH": "Ghana", "GI": "Gibraltar", "GL": "Greenland", "GD": "Grenada", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GF": "Guiana thu\u1ed9c Ph\u00e1p", "GN": "Guinea", "GQ": "Guinea X\u00edch \u0110\u1ea1o", "GW": "Guinea-Bissau", "GY": "Guyana", "NL": "H\u00e0 Lan", "HT": "Haiti", "KR": "H\u00e0n Qu\u1ed1c", "US": "Hoa K\u1ef3", "HN": "Honduras", "HK": "H\u1ed3ng K\u00f4ng, Trung Qu\u1ed1c", "HU": "Hungary", "GR": "Hy L\u1ea1p", "IS": "Iceland", "ID": "Indonesia", "IR": "Iran", "IQ": "Iraq", "IE": "Ireland", "IL": "Israel", "IT": "Italy", "JM": "Jamaica", "JO": "Jordan", "KZ": "Kazakhstan", "KE": "Kenya", "KI": "Kiribati", "KW": "Kuwait", "KG": "Kyrgyzstan", "IO": "L\u00e3nh th\u1ed5 \u1ea4n \u0110\u1ed9 D\u01b0\u01a1ng thu\u1ed9c Anh", "TF": "L\u00e3nh th\u1ed5 ph\u00eda Nam Thu\u1ed9c Ph\u00e1p", "LA": "L\u00e0o", "LV": "Latvia", "LS": "Lesotho", "LB": "Li-b\u0103ng", "LR": "Liberia", "LY": "Libya", "LI": "Liechtenstein", "LT": "Litva", "LU": "Luxembourg", "MA": "Ma-r\u1ed1c", "MO": "Macao, Trung Qu\u1ed1c", "MG": "Madagascar", "MW": "Malawi", "MY": "Malaysia", "MV": "Maldives", "ML": "Mali", "MT": "Malta", "MQ": "Martinique", "MR": "Mauritania", "MU": "Mauritius", "YT": "Mayotte", "MX": "Mexico", "MD": "Moldova", "MC": "Monaco", "ME": "Montenegro", "MS": "Montserrat", "MZ": "Mozambique", "MN": "M\u00f4ng C\u1ed5", "MM": "Myanmar (Mi\u1ebfn \u0110i\u1ec7n)", "NO": "Na Uy", "AQ": "Nam C\u1ef1c", "GS": "Nam Georgia & Qu\u1ea7n \u0111\u1ea3o Nam Sandwich", "ZA": "Nam Phi", "SS": "Nam Sudan", "NA": "Namibia", "NR": "Nauru", "NP": "Nepal", "NC": "New Caledonia", "NZ": "New Zealand", "RU": "Nga", "JP": "Nh\u1eadt B\u1ea3n", "NI": "Nicaragua", "NE": "Niger", "NG": "Nigeria", "NU": "Niue", "OM": "Oman", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua New Guinea", "PY": "Paraguay", "PE": "Peru", "FR": "Ph\u00e1p", "FI": "Ph\u1ea7n Lan", "PH": "Philippines", "PF": "Polynesia thu\u1ed9c Ph\u00e1p", "PR": "Puerto Rico", "QA": "Qatar", "AX": "Qu\u1ea7n \u0111\u1ea3o \u00c5land", "KY": "Qu\u1ea7n \u0111\u1ea3o Cayman", "CC": "Qu\u1ea7n \u0111\u1ea3o Cocos (Keeling)", "CK": "Qu\u1ea7n \u0111\u1ea3o Cook", "FK": "Qu\u1ea7n \u0111\u1ea3o Falkland", "FO": "Qu\u1ea7n \u0111\u1ea3o Faroe", "HM": "Qu\u1ea7n \u0111\u1ea3o Heard v\u00e0 McDonald", "PN": "Qu\u1ea7n \u0111\u1ea3o Pitcairn", "SB": "Qu\u1ea7n \u0111\u1ea3o Solomon", "TC": "Qu\u1ea7n \u0111\u1ea3o Turks v\u00e0 Caicos", "VG": "Qu\u1ea7n \u0111\u1ea3o Virgin thu\u1ed9c Anh", "VI": "Qu\u1ea7n \u0111\u1ea3o Virgin thu\u1ed9c M\u1ef9", "RE": "R\u00e9union", "RO": "Romania", "RW": "Rwanda", "PM": "Saint Pierre v\u00e0 Miquelon", "WS": "Samoa", "AS": "Samoa thu\u1ed9c M\u1ef9", "SM": "San Marino", "ST": "S\u00e3o Tom\u00e9 v\u00e0 Pr\u00edncipe", "CZ": "S\u00e9c", "SN": "Senegal", "RS": "Serbia", "SC": "Seychelles", "SL": "Sierra Leone", "SG": "Singapore", "SX": "Sint Maarten", "CY": "S\u00edp", "SK": "Slovakia", "SI": "Slovenia", "SO": "Somalia", "LK": "Sri Lanka", "BL": "St. Barth\u00e9lemy", "SH": "St. Helena", "KN": "St. Kitts v\u00e0 Nevis", "LC": "St. Lucia", "MF": "St. Martin", "VC": "St. Vincent v\u00e0 Grenadines", "SD": "Sudan", "SR": "Suriname", "SJ": "Svalbard v\u00e0 Jan Mayen", "SZ": "Swaziland", "SY": "Syria", "TJ": "Tajikistan", "TZ": "Tanzania", "ES": "T\u00e2y Ban Nha", "EH": "T\u00e2y Sahara", "TH": "Th\u00e1i Lan", "VA": "Th\u00e0nh Vatican", "TR": "Th\u1ed5 Nh\u0129 K\u1ef3", "SE": "Th\u1ee5y \u0110i\u1ec3n", "CH": "Th\u1ee5y S\u0129", "TL": "Timor-Leste", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "KP": "Tri\u1ec1u Ti\u00ean", "TT": "Trinidad v\u00e0 Tobago", "CN": "Trung Qu\u1ed1c", "TN": "Tunisia", "TM": "Turkmenistan", "UG": "Uganda", "UA": "Ukraina", "UY": "Uruguay", "UZ": "Uzbekistan", "VU": "Vanuatu", "VE": "Venezuela", "VN": "Vi\u1ec7t Nam", "GB": "V\u01b0\u01a1ng qu\u1ed1c Anh", "WF": "Wallis v\u00e0 Futuna", "YE": "Yemen", "ZM": "Zambia", "ZW": "Zimbabwe"}onionshare-2.6.3/desktop/onionshare/resources/countries/zh_Hans.json000066400000000000000000000174121475545702100260360ustar00rootroot00000000000000{"AL": "\u963f\u5c14\u5df4\u5c3c\u4e9a", "DZ": "\u963f\u5c14\u53ca\u5229\u4e9a", "AF": "\u963f\u5bcc\u6c57", "AR": "\u963f\u6839\u5ef7", "AE": "\u963f\u62c9\u4f2f\u8054\u5408\u914b\u957f\u56fd", "AW": "\u963f\u9c81\u5df4", "OM": "\u963f\u66fc", "AZ": "\u963f\u585e\u62dc\u7586", "EG": "\u57c3\u53ca", "ET": "\u57c3\u585e\u4fc4\u6bd4\u4e9a", "IE": "\u7231\u5c14\u5170", "EE": "\u7231\u6c99\u5c3c\u4e9a", "AD": "\u5b89\u9053\u5c14", "AO": "\u5b89\u54e5\u62c9", "AI": "\u5b89\u572d\u62c9", "AG": "\u5b89\u63d0\u74dc\u548c\u5df4\u5e03\u8fbe", "AT": "\u5965\u5730\u5229", "AX": "\u5965\u5170\u7fa4\u5c9b", "AU": "\u6fb3\u5927\u5229\u4e9a", "BB": "\u5df4\u5df4\u591a\u65af", "PG": "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a", "BS": "\u5df4\u54c8\u9a6c", "PK": "\u5df4\u57fa\u65af\u5766", "PY": "\u5df4\u62c9\u572d", "BH": "\u5df4\u6797", "PA": "\u5df4\u62ff\u9a6c", "BR": "\u5df4\u897f", "BY": "\u767d\u4fc4\u7f57\u65af", "BM": "\u767e\u6155\u5927", "BG": "\u4fdd\u52a0\u5229\u4e9a", "MK": "\u5317\u9a6c\u5176\u987f", "BJ": "\u8d1d\u5b81", "BE": "\u6bd4\u5229\u65f6", "IS": "\u51b0\u5c9b", "PR": "\u6ce2\u591a\u9ece\u5404", "PL": "\u6ce2\u5170", "BA": "\u6ce2\u65af\u5c3c\u4e9a\u548c\u9ed1\u585e\u54e5\u7ef4\u90a3", "BO": "\u73bb\u5229\u7ef4\u4e9a", "BZ": "\u4f2f\u5229\u5179", "BW": "\u535a\u8328\u74e6\u7eb3", "BT": "\u4e0d\u4e39", "BF": "\u5e03\u57fa\u7eb3\u6cd5\u7d22", "BI": "\u5e03\u9686\u8fea", "BV": "\u5e03\u97e6\u5c9b", "KP": "\u671d\u9c9c", "GQ": "\u8d64\u9053\u51e0\u5185\u4e9a", "DK": "\u4e39\u9ea6", "DE": "\u5fb7\u56fd", "TL": "\u4e1c\u5e1d\u6c76", "TG": "\u591a\u54e5", "DO": "\u591a\u7c73\u5c3c\u52a0\u5171\u548c\u56fd", "DM": "\u591a\u7c73\u5c3c\u514b", "RU": "\u4fc4\u7f57\u65af", "EC": "\u5384\u74dc\u591a\u5c14", "ER": "\u5384\u7acb\u7279\u91cc\u4e9a", "FR": "\u6cd5\u56fd", "FO": "\u6cd5\u7f57\u7fa4\u5c9b", "PF": "\u6cd5\u5c5e\u6ce2\u5229\u5c3c\u897f\u4e9a", "GF": "\u6cd5\u5c5e\u572d\u4e9a\u90a3", "TF": "\u6cd5\u5c5e\u5357\u90e8\u9886\u5730", "MF": "\u6cd5\u5c5e\u5723\u9a6c\u4e01", "VA": "\u68b5\u8482\u5188", "PH": "\u83f2\u5f8b\u5bbe", "FJ": "\u6590\u6d4e", "FI": "\u82ac\u5170", "CV": "\u4f5b\u5f97\u89d2", "FK": "\u798f\u514b\u5170\u7fa4\u5c9b", "GM": "\u5188\u6bd4\u4e9a", "CG": "\u521a\u679c\uff08\u5e03\uff09", "CD": "\u521a\u679c\uff08\u91d1\uff09", "CO": "\u54e5\u4f26\u6bd4\u4e9a", "CR": "\u54e5\u65af\u8fbe\u9ece\u52a0", "GD": "\u683c\u6797\u7eb3\u8fbe", "GL": "\u683c\u9675\u5170", "GE": "\u683c\u9c81\u5409\u4e9a", "GG": "\u6839\u897f\u5c9b", "CU": "\u53e4\u5df4", "GP": "\u74dc\u5fb7\u7f57\u666e", "GU": "\u5173\u5c9b", "GY": "\u572d\u4e9a\u90a3", "KZ": "\u54c8\u8428\u514b\u65af\u5766", "HT": "\u6d77\u5730", "KR": "\u97e9\u56fd", "NL": "\u8377\u5170", "BQ": "\u8377\u5c5e\u52a0\u52d2\u6bd4\u533a", "SX": "\u8377\u5c5e\u5723\u9a6c\u4e01", "HM": "\u8d6b\u5fb7\u5c9b\u548c\u9ea6\u514b\u5510\u7eb3\u7fa4\u5c9b", "ME": "\u9ed1\u5c71", "HN": "\u6d2a\u90fd\u62c9\u65af", "KI": "\u57fa\u91cc\u5df4\u65af", "DJ": "\u5409\u5e03\u63d0", "KG": "\u5409\u5c14\u5409\u65af\u65af\u5766", "GN": "\u51e0\u5185\u4e9a", "GW": "\u51e0\u5185\u4e9a\u6bd4\u7ecd", "CA": "\u52a0\u62ff\u5927", "GH": "\u52a0\u7eb3", "GA": "\u52a0\u84ec", "KH": "\u67ec\u57d4\u5be8", "CZ": "\u6377\u514b", "ZW": "\u6d25\u5df4\u5e03\u97e6", "CM": "\u5580\u9ea6\u9686", "QA": "\u5361\u5854\u5c14", "KY": "\u5f00\u66fc\u7fa4\u5c9b", "CC": "\u79d1\u79d1\u65af\uff08\u57fa\u6797\uff09\u7fa4\u5c9b", "KM": "\u79d1\u6469\u7f57", "CI": "\u79d1\u7279\u8fea\u74e6", "KW": "\u79d1\u5a01\u7279", "HR": "\u514b\u7f57\u5730\u4e9a", "KE": "\u80af\u5c3c\u4e9a", "CK": "\u5e93\u514b\u7fa4\u5c9b", "CW": "\u5e93\u62c9\u7d22", "LV": "\u62c9\u8131\u7ef4\u4e9a", "LS": "\u83b1\u7d22\u6258", "LA": "\u8001\u631d", "LB": "\u9ece\u5df4\u5ae9", "LT": "\u7acb\u9676\u5b9b", "LR": "\u5229\u6bd4\u91cc\u4e9a", "LY": "\u5229\u6bd4\u4e9a", "LI": "\u5217\u652f\u6566\u58eb\u767b", "RE": "\u7559\u5c3c\u6c6a", "LU": "\u5362\u68ee\u5821", "RW": "\u5362\u65fa\u8fbe", "RO": "\u7f57\u9a6c\u5c3c\u4e9a", "MG": "\u9a6c\u8fbe\u52a0\u65af\u52a0", "IM": "\u9a6c\u6069\u5c9b", "MV": "\u9a6c\u5c14\u4ee3\u592b", "MT": "\u9a6c\u8033\u4ed6", "MW": "\u9a6c\u62c9\u7ef4", "MY": "\u9a6c\u6765\u897f\u4e9a", "ML": "\u9a6c\u91cc", "MQ": "\u9a6c\u63d0\u5c3c\u514b", "YT": "\u9a6c\u7ea6\u7279", "MU": "\u6bdb\u91cc\u6c42\u65af", "MR": "\u6bdb\u91cc\u5854\u5c3c\u4e9a", "US": "\u7f8e\u56fd", "AS": "\u7f8e\u5c5e\u8428\u6469\u4e9a", "VI": "\u7f8e\u5c5e\u7ef4\u5c14\u4eac\u7fa4\u5c9b", "MN": "\u8499\u53e4", "MS": "\u8499\u7279\u585e\u62c9\u7279", "BD": "\u5b5f\u52a0\u62c9\u56fd", "PE": "\u79d8\u9c81", "MM": "\u7f05\u7538", "MD": "\u6469\u5c14\u591a\u74e6", "MA": "\u6469\u6d1b\u54e5", "MC": "\u6469\u7eb3\u54e5", "MZ": "\u83ab\u6851\u6bd4\u514b", "MX": "\u58a8\u897f\u54e5", "NA": "\u7eb3\u7c73\u6bd4\u4e9a", "ZA": "\u5357\u975e", "AQ": "\u5357\u6781\u6d32", "GS": "\u5357\u4e54\u6cbb\u4e9a\u548c\u5357\u6851\u5a01\u5947\u7fa4\u5c9b", "SS": "\u5357\u82cf\u4e39", "NR": "\u7459\u9c81", "NI": "\u5c3c\u52a0\u62c9\u74dc", "NP": "\u5c3c\u6cca\u5c14", "NE": "\u5c3c\u65e5\u5c14", "NG": "\u5c3c\u65e5\u5229\u4e9a", "NU": "\u7ebd\u57c3", "NO": "\u632a\u5a01", "NF": "\u8bfa\u798f\u514b\u5c9b", "PW": "\u5e15\u52b3", "PN": "\u76ae\u7279\u51ef\u6069\u7fa4\u5c9b", "PT": "\u8461\u8404\u7259", "JP": "\u65e5\u672c", "SE": "\u745e\u5178", "CH": "\u745e\u58eb", "SV": "\u8428\u5c14\u74e6\u591a", "WS": "\u8428\u6469\u4e9a", "RS": "\u585e\u5c14\u7ef4\u4e9a", "SL": "\u585e\u62c9\u5229\u6602", "SN": "\u585e\u5185\u52a0\u5c14", "CY": "\u585e\u6d66\u8def\u65af", "SC": "\u585e\u820c\u5c14", "SA": "\u6c99\u7279\u963f\u62c9\u4f2f", "BL": "\u5723\u5df4\u6cf0\u52d2\u7c73", "CX": "\u5723\u8bde\u5c9b", "ST": "\u5723\u591a\u7f8e\u548c\u666e\u6797\u897f\u6bd4", "SH": "\u5723\u8d6b\u52d2\u62ff", "KN": "\u5723\u57fa\u8328\u548c\u5c3c\u7ef4\u65af", "LC": "\u5723\u5362\u897f\u4e9a", "SM": "\u5723\u9a6c\u529b\u8bfa", "PM": "\u5723\u76ae\u57c3\u5c14\u548c\u5bc6\u514b\u9686\u7fa4\u5c9b", "VC": "\u5723\u6587\u68ee\u7279\u548c\u683c\u6797\u7eb3\u4e01\u65af", "LK": "\u65af\u91cc\u5170\u5361", "SK": "\u65af\u6d1b\u4f10\u514b", "SI": "\u65af\u6d1b\u6587\u5c3c\u4e9a", "SJ": "\u65af\u74e6\u5c14\u5df4\u548c\u626c\u9a6c\u5ef6", "SZ": "\u65af\u5a01\u58eb\u5170", "SD": "\u82cf\u4e39", "SR": "\u82cf\u91cc\u5357", "SB": "\u6240\u7f57\u95e8\u7fa4\u5c9b", "SO": "\u7d22\u9a6c\u91cc", "TJ": "\u5854\u5409\u514b\u65af\u5766", "TW": "\u53f0\u6e7e", "TH": "\u6cf0\u56fd", "TZ": "\u5766\u6851\u5c3c\u4e9a", "TO": "\u6c64\u52a0", "TC": "\u7279\u514b\u65af\u548c\u51ef\u79d1\u65af\u7fa4\u5c9b", "TT": "\u7279\u7acb\u5c3c\u8fbe\u548c\u591a\u5df4\u54e5", "TN": "\u7a81\u5c3c\u65af", "TR": "\u571f\u8033\u5176", "TM": "\u571f\u5e93\u66fc\u65af\u5766", "TK": "\u6258\u514b\u52b3", "WF": "\u74e6\u5229\u65af\u548c\u5bcc\u56fe\u7eb3", "VU": "\u74e6\u52aa\u963f\u56fe", "GT": "\u5371\u5730\u9a6c\u62c9", "VE": "\u59d4\u5185\u745e\u62c9", "BN": "\u6587\u83b1", "UG": "\u4e4c\u5e72\u8fbe", "UA": "\u4e4c\u514b\u5170", "UY": "\u4e4c\u62c9\u572d", "UZ": "\u4e4c\u5179\u522b\u514b\u65af\u5766", "ES": "\u897f\u73ed\u7259", "EH": "\u897f\u6492\u54c8\u62c9", "GR": "\u5e0c\u814a", "SG": "\u65b0\u52a0\u5761", "NC": "\u65b0\u5580\u91cc\u591a\u5c3c\u4e9a", "NZ": "\u65b0\u897f\u5170", "HU": "\u5308\u7259\u5229", "SY": "\u53d9\u5229\u4e9a", "JM": "\u7259\u4e70\u52a0", "AM": "\u4e9a\u7f8e\u5c3c\u4e9a", "YE": "\u4e5f\u95e8", "IQ": "\u4f0a\u62c9\u514b", "IR": "\u4f0a\u6717", "IL": "\u4ee5\u8272\u5217", "IT": "\u610f\u5927\u5229", "IN": "\u5370\u5ea6", "ID": "\u5370\u5ea6\u5c3c\u897f\u4e9a", "GB": "\u82f1\u56fd", "VG": "\u82f1\u5c5e\u7ef4\u5c14\u4eac\u7fa4\u5c9b", "IO": "\u82f1\u5c5e\u5370\u5ea6\u6d0b\u9886\u5730", "JO": "\u7ea6\u65e6", "VN": "\u8d8a\u5357", "ZM": "\u8d5e\u6bd4\u4e9a", "TD": "\u4e4d\u5f97", "GI": "\u76f4\u5e03\u7f57\u9640", "CL": "\u667a\u5229", "CF": "\u4e2d\u975e\u5171\u548c\u56fd", "CN": "\u4e2d\u56fd", "MO": "\u4e2d\u56fd\u6fb3\u95e8\u7279\u522b\u884c\u653f\u533a", "HK": "\u4e2d\u56fd\u9999\u6e2f\u7279\u522b\u884c\u653f\u533a"}onionshare-2.6.3/desktop/onionshare/resources/countries/zh_Hant.json000066400000000000000000000172441475545702100260420ustar00rootroot00000000000000{"TT": "\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5", "TR": "\u571f\u8033\u5176", "TC": "\u571f\u514b\u65af\u53ca\u958b\u79d1\u65af\u7fa4\u5cf6", "TM": "\u571f\u5eab\u66fc", "BT": "\u4e0d\u4e39", "CF": "\u4e2d\u975e\u5171\u548c\u570b", "CN": "\u4e2d\u570b", "HK": "\u4e2d\u570b\u9999\u6e2f\u7279\u5225\u884c\u653f\u5340", "MO": "\u4e2d\u570b\u6fb3\u9580\u7279\u5225\u884c\u653f\u5340", "DK": "\u4e39\u9ea5", "EC": "\u5384\u74dc\u591a", "ER": "\u5384\u5229\u5782\u4e9e", "PG": "\u5df4\u5e03\u4e9e\u7d10\u5e7e\u5167\u4e9e", "BR": "\u5df4\u897f", "BB": "\u5df4\u8c9d\u591a", "PY": "\u5df4\u62c9\u572d", "BH": "\u5df4\u6797", "BS": "\u5df4\u54c8\u99ac", "PA": "\u5df4\u62ff\u99ac", "PK": "\u5df4\u57fa\u65af\u5766", "JP": "\u65e5\u672c", "BE": "\u6bd4\u5229\u6642", "JM": "\u7259\u8cb7\u52a0", "IL": "\u4ee5\u8272\u5217", "CA": "\u52a0\u62ff\u5927", "GA": "\u52a0\u5f6d", "MK": "\u5317\u99ac\u5176\u9813", "KP": "\u5317\u97d3", "QA": "\u5361\u9054", "CU": "\u53e4\u5df4", "TW": "\u53f0\u7063", "SZ": "\u53f2\u74e6\u5e1d\u5c3c", "NE": "\u5c3c\u65e5", "NI": "\u5c3c\u52a0\u62c9\u74dc", "NP": "\u5c3c\u6cca\u723e", "BF": "\u5e03\u5409\u7d0d\u6cd5\u7d22", "BV": "\u5e03\u5a01\u5cf6", "GP": "\u74dc\u5730\u6d1b\u666e", "GT": "\u74dc\u5730\u99ac\u62c9", "WF": "\u74e6\u5229\u65af\u7fa4\u5cf6\u548c\u5bcc\u5716\u90a3\u7fa4\u5cf6", "GM": "\u7518\u6bd4\u4e9e", "BY": "\u767d\u4fc4\u7f85\u65af", "PN": "\u76ae\u7279\u80af\u7fa4\u5cf6", "LT": "\u7acb\u9676\u5b9b", "IQ": "\u4f0a\u62c9\u514b", "IR": "\u4f0a\u6717", "IS": "\u51b0\u5cf6", "LI": "\u5217\u652f\u6566\u65af\u767b", "HU": "\u5308\u7259\u5229", "ID": "\u5370\u5c3c", "IN": "\u5370\u5ea6", "DJ": "\u5409\u5e03\u5730", "KI": "\u5409\u91cc\u5df4\u65af", "KG": "\u5409\u723e\u5409\u65af", "DM": "\u591a\u7c73\u5c3c\u514b", "DO": "\u591a\u660e\u5c3c\u52a0\u5171\u548c\u570b", "TG": "\u591a\u54e5", "AG": "\u5b89\u5730\u5361\u53ca\u5df4\u5e03\u9054", "AI": "\u5b89\u594e\u62c9", "AO": "\u5b89\u54e5\u62c9", "AD": "\u5b89\u9053\u723e", "TK": "\u6258\u514b\u52de\u7fa4\u5cf6", "BM": "\u767e\u6155\u9054", "ET": "\u8863\u7d22\u6bd4\u4e9e", "ES": "\u897f\u73ed\u7259", "EH": "\u897f\u6492\u54c8\u62c9", "HR": "\u514b\u7f85\u57c3\u897f\u4e9e", "LY": "\u5229\u6bd4\u4e9e", "HN": "\u5b8f\u90fd\u62c9\u65af", "GR": "\u5e0c\u81d8", "BN": "\u6c76\u840a", "SA": "\u6c99\u70cf\u5730\u963f\u62c9\u4f2f", "BZ": "\u8c9d\u91cc\u65af", "BJ": "\u8c9d\u5357", "GQ": "\u8d64\u9053\u5e7e\u5167\u4e9e", "ZW": "\u8f9b\u5df4\u5a01", "AM": "\u4e9e\u7f8e\u5c3c\u4e9e", "AZ": "\u4e9e\u585e\u62dc\u7136", "TZ": "\u5766\u5c1a\u5c3c\u4e9e", "NG": "\u5948\u53ca\u5229\u4e9e", "VE": "\u59d4\u5167\u745e\u62c9", "BD": "\u5b5f\u52a0\u62c9", "ZM": "\u5c1a\u6bd4\u4e9e", "PW": "\u5e1b\u7409", "LV": "\u62c9\u812b\u7dad\u4e9e", "TO": "\u6771\u52a0", "TL": "\u6771\u5e1d\u6c76", "FR": "\u6cd5\u570b", "FO": "\u6cd5\u7f85\u7fa4\u5cf6", "GF": "\u6cd5\u5c6c\u572d\u4e9e\u90a3", "TF": "\u6cd5\u5c6c\u5357\u90e8\u5c6c\u5730", "PF": "\u6cd5\u5c6c\u73bb\u91cc\u5c3c\u897f\u4e9e", "MF": "\u6cd5\u5c6c\u8056\u99ac\u4e01", "BA": "\u6ce2\u58eb\u5c3c\u4e9e\u8207\u8d6b\u585e\u54e5\u7dad\u7d0d", "BW": "\u6ce2\u672d\u90a3", "PR": "\u6ce2\u591a\u9ece\u5404", "PL": "\u6ce2\u862d", "GI": "\u76f4\u5e03\u7f85\u9640", "KE": "\u80af\u4e9e", "FI": "\u82ac\u862d", "AE": "\u963f\u62c9\u4f2f\u806f\u5408\u5927\u516c\u570b", "AR": "\u963f\u6839\u5ef7", "OM": "\u963f\u66fc", "AF": "\u963f\u5bcc\u6c57", "DZ": "\u963f\u723e\u53ca\u5229\u4e9e", "AL": "\u963f\u723e\u5df4\u5c3c\u4e9e", "RU": "\u4fc4\u7f85\u65af", "BG": "\u4fdd\u52a0\u5229\u4e9e", "ZA": "\u5357\u975e", "GS": "\u5357\u55ac\u6cbb\u4e9e\u8207\u5357\u4e09\u660e\u6cbb\u7fa4\u5cf6", "AQ": "\u5357\u6975\u6d32", "KR": "\u5357\u97d3", "SS": "\u5357\u8607\u4e39", "KZ": "\u54c8\u85a9\u514b", "TD": "\u67e5\u5fb7", "KH": "\u67ec\u57d4\u5be8", "BO": "\u73bb\u5229\u7dad\u4e9e", "CC": "\u79d1\u514b\u65af\uff08\u57fa\u9748\uff09\u7fa4\u5cf6", "KW": "\u79d1\u5a01\u7279", "TN": "\u7a81\u5c3c\u897f\u4e9e", "JO": "\u7d04\u65e6", "US": "\u7f8e\u570b", "VI": "\u7f8e\u5c6c\u7dad\u4eac\u7fa4\u5cf6", "AS": "\u7f8e\u5c6c\u85a9\u6469\u4e9e", "GB": "\u82f1\u570b", "IO": "\u82f1\u5c6c\u5370\u5ea6\u6d0b\u9818\u5730", "VG": "\u82f1\u5c6c\u7dad\u4eac\u7fa4\u5cf6", "MR": "\u8305\u5229\u5854\u5c3c\u4e9e", "GH": "\u8fe6\u7d0d", "CG": "\u525b\u679c\uff08\u5e03\u62c9\u85a9\uff09", "CD": "\u525b\u679c\uff08\u91d1\u590f\u6c99\uff09", "CO": "\u54e5\u502b\u6bd4\u4e9e", "CR": "\u54e5\u65af\u5927\u9ece\u52a0", "EG": "\u57c3\u53ca", "CK": "\u5eab\u514b\u7fa4\u5cf6", "CW": "\u5eab\u62c9\u7d22", "NO": "\u632a\u5a01", "SJ": "\u632a\u5a01\u5c6c\u65af\u74e6\u5df4\u53ca\u5c16\u68c9", "GG": "\u6839\u606f", "GL": "\u683c\u9675\u862d", "GD": "\u683c\u745e\u90a3\u9054", "TH": "\u6cf0\u570b", "HT": "\u6d77\u5730", "UG": "\u70cf\u5e72\u9054", "UA": "\u70cf\u514b\u862d", "UY": "\u70cf\u62c9\u572d", "UZ": "\u70cf\u8332\u5225\u514b", "RE": "\u7559\u5c3c\u65fa", "PE": "\u79d8\u9b6f", "NA": "\u7d0d\u7c73\u6bd4\u4e9e", "NZ": "\u7d10\u897f\u862d", "NU": "\u7d10\u57c3\u5cf6", "SO": "\u7d22\u99ac\u5229\u4e9e", "SB": "\u7d22\u7f85\u9580\u7fa4\u5cf6", "MQ": "\u99ac\u4e01\u5c3c\u514b", "ML": "\u99ac\u5229", "MY": "\u99ac\u4f86\u897f\u4e9e", "MW": "\u99ac\u62c9\u5a01", "YT": "\u99ac\u7d04\u7279\u5cf6", "MG": "\u99ac\u9054\u52a0\u65af\u52a0", "MT": "\u99ac\u723e\u4ed6", "MV": "\u99ac\u723e\u5730\u592b", "CZ": "\u6377\u514b", "SY": "\u6558\u5229\u4e9e", "IM": "\u66fc\u5cf6", "VA": "\u68b5\u8482\u5ca1", "AW": "\u8377\u5c6c\u963f\u9b6f\u5df4", "SX": "\u8377\u5c6c\u8056\u99ac\u4e01", "NL": "\u8377\u862d", "BQ": "\u8377\u862d\u52a0\u52d2\u6bd4\u5340", "MZ": "\u83ab\u4e09\u6bd4\u514b", "CM": "\u5580\u9ea5\u9686", "GE": "\u55ac\u6cbb\u4e9e", "GN": "\u5e7e\u5167\u4e9e", "GW": "\u5e7e\u5167\u4e9e\u6bd4\u7d22", "FJ": "\u6590\u6fdf", "LK": "\u65af\u91cc\u862d\u5361", "SK": "\u65af\u6d1b\u4f10\u514b", "SI": "\u65af\u6d1b\u7dad\u5c3c\u4e9e", "CL": "\u667a\u5229", "PH": "\u83f2\u5f8b\u8cd3", "CI": "\u8c61\u7259\u6d77\u5cb8", "VN": "\u8d8a\u5357", "KY": "\u958b\u66fc\u7fa4\u5cf6", "TJ": "\u5854\u5409\u514b", "SN": "\u585e\u5167\u52a0\u723e", "SC": "\u585e\u5e2d\u723e", "RS": "\u585e\u723e\u7dad\u4e9e", "AT": "\u5967\u5730\u5229", "AX": "\u5967\u862d\u7fa4\u5cf6", "EE": "\u611b\u6c99\u5c3c\u4e9e", "IE": "\u611b\u723e\u862d", "SG": "\u65b0\u52a0\u5761", "NC": "\u65b0\u5580\u91cc\u591a\u5c3c\u4e9e", "SL": "\u7345\u5b50\u5c71", "CH": "\u745e\u58eb", "SE": "\u745e\u5178", "VU": "\u842c\u90a3\u675c", "IT": "\u7fa9\u5927\u5229", "BL": "\u8056\u5df4\u745f\u7c73", "VC": "\u8056\u6587\u68ee\u53ca\u683c\u745e\u90a3\u4e01", "PM": "\u8056\u76ae\u57c3\u8207\u5bc6\u514b\u9686\u7fa4\u5cf6", "ST": "\u8056\u591a\u7f8e\u666e\u6797\u897f\u6bd4", "KN": "\u8056\u514b\u91cc\u65af\u591a\u798f\u53ca\u5c3c\u7dad\u65af", "SM": "\u8056\u99ac\u5229\u8afe", "SH": "\u8056\u8d6b\u52d2\u62ff\u5cf6", "CX": "\u8056\u8a95\u5cf6", "LC": "\u8056\u9732\u897f\u4e9e", "YE": "\u8449\u9580", "KM": "\u845b\u6469", "PT": "\u8461\u8404\u7259", "FK": "\u798f\u514b\u862d\u7fa4\u5cf6", "CV": "\u7dad\u5fb7\u89d2", "MN": "\u8499\u53e4", "MS": "\u8499\u54f2\u81d8", "ME": "\u8499\u7279\u5167\u54e5\u7f85", "BI": "\u84b2\u9686\u5730", "GY": "\u84cb\u4e9e\u90a3", "HM": "\u8d6b\u5fb7\u5cf6\u53ca\u9ea5\u5510\u7d0d\u7fa4\u5cf6", "LA": "\u5bee\u570b", "DE": "\u5fb7\u570b", "MA": "\u6469\u6d1b\u54e5", "MC": "\u6469\u7d0d\u54e5", "MD": "\u6469\u723e\u591a\u74e6", "MU": "\u6a21\u91cc\u897f\u65af", "MM": "\u7dec\u7538", "LB": "\u9ece\u5df4\u5ae9", "MX": "\u58a8\u897f\u54e5", "AU": "\u6fb3\u6d32", "RW": "\u76e7\u5b89\u9054", "LU": "\u76e7\u68ee\u5821", "NF": "\u8afe\u798f\u514b\u5cf6", "NR": "\u8afe\u9b6f", "LR": "\u8cf4\u6bd4\u745e\u4e9e", "LS": "\u8cf4\u7d22\u6258", "CY": "\u8cfd\u666e\u52d2\u65af", "SV": "\u85a9\u723e\u74e6\u591a", "WS": "\u85a9\u6469\u4e9e", "RO": "\u7f85\u99ac\u5c3c\u4e9e", "GU": "\u95dc\u5cf6", "SD": "\u8607\u4e39", "SR": "\u8607\u5229\u5357"}onionshare-2.6.3/desktop/onionshare/resources/images/000077500000000000000000000000001475545702100227765ustar00rootroot00000000000000onionshare-2.6.3/desktop/onionshare/resources/images/countries/000077500000000000000000000000001475545702100250115ustar00rootroot00000000000000onionshare-2.6.3/desktop/onionshare/resources/images/countries/ad.png000066400000000000000000000031771475545702100261130ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3s0IIDAThMo3o\+ҔDE"bvRvݢv h/S~ z'HN\ PFmnrlŖDJ,Q|X v|Z K<3ή`SAZ?$ ) ?EH@LXy6N3e([3e([3e([3e([3e([o뿏"Bz_$I].;<=tx9$qHljQ*c{ǨUqܡrgdK:8N/bM!@kAw$ۗ >5]wcvl$g-5{{.7' #%Q"IRF2~0Mct!ll_=wUFg!Fl`$H :фޙKiXRj[_>sKp> -V!iҮAHgy0V @@UYEFaym}po ]Ct">N<2"kO]S̀>:) WJ(ߥǙtHS˱R%?a f 'a@`&1d߳ X$? *^<}۠ps{'yi(nf~9+Ʊ`%c<|kbw8|RMMh->ݟlhAyAHL槙%%Hi˓Mǒ qoUa^k*I,ֈ**#\7)0f2*~BO^~ YFIK]58re^n la la la la la+T><RV:%IOHD :Ӻu \FRUrϲ} ;x:Z:M\Bץ>3C3)!pw[%~=( ֥KH^G$ ٸGq[}@"֣AUMNb}e!*nBM)pjE~$] H{ H۱C{~.8lf!ۨҸqИYʣC | @&]-Ph1;0`7X#C$xaFg~&g'P:PYBZKZYձ5v~mX8[l&v_r4щ<:9s:2@tI4;W@2JG'08#ӵia$HB{3hz%Bt1mngH w7h /_ G$bDmڻoq܋|ǁ q*X3ҙ"Yfgi(~zƹf ctg wE޷l=5밲8Pa`x 5Ae ^Hĸ |,POn.br*_}mF*9mPp hqJ%iJ'I$vl'УDUhL]Cüo8"I4ND+WSi=x sA G!c xnFEc!4fa P>zR_}SWIG(fE?8"@dt8]#=t82)L9n8PR!%\iG^LlV2O(M,|ܥj&+\yqM$FF73TΜŵ,j-Ӄ7giw僶0t'u[)8j=82ZO/ ̭cCh=7#W45A) ߇ n6#'2=d,HaMSpk ~EkY,;Bwow7y?E;οy%_qasj m lm lm lm lm l =%tEXtdate:create2022-03-16T11:51:12+00:00ДeD%tEXtdate:modify2022-03-16T11:51:12+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ag.png000066400000000000000000000044061475545702100261120ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3SIDAThylT?X8\.%MQB¡%V[ i:&uJ B)GJ#D 4 R"ZdK\!sHl|w7cvgHg~}g~ͼX,=, pOf$r̈́Š(&dE%t}iX< K'f9Q"`^iBT8_w pDÀ:`-= Y:1]Ya0c \m'5=>e铃j\ 9Ӥ89'*<ꝁUKG/@kl;n4<(Ƅ1X T xX@~֭QeeLHOtȝK?8hl_EƏwdp*XhAXA\D!%SA,PSFtU!DS)̧E+ϟ#>؆1#":m%.tl @Q:/J^q>= ?̚e2Z,0&dH@bYeX22&<ݮpMF{w@z3AS@k$̚G 7IHJ{?!邸x-`ϡIyTgy綆@vdM- ${\Q mByX:>% g”ke#3`AqO1YG  \kaN.hzt]28pI0>cCcjV#W~^$\^j b 2-G3 *T(vz< @C@ ' ` >)XN6~`8Yo $ۀߝxR_:FDȿ_±U8.ָ ҕ{mo+n1Q0m|3F$k 5U)\@[gON+\^2'q1fDf`x_CSdmum$钻KmTgB<ؘ0$|- y4Ҳ`(DPU+&Gwn'|ѪKJ xRC۸_nbuqv]1 #qޢv\sy$U謬͢k@λo5ga{ o<|BJO֓zs~[Wjk$dw\d]oIv ? ^޽!8 &Txj]YIǦMv{ [o*-&Ʊx(*~`PۨF 23eϙs>{k;(qD/8Z<*B" Ijr<1۷sx\F s& %5U ='%))V(ukޡdclET'lmd%n0C I6I^WR_JԀn˦3y%B sWPSG"kWcU,yYSAy){0Dg(}pJKO$> 5 x|_1w[>'u/bbOR["<_S`c쌟R?iٶȋR9f ϝ&w?:jIOFàs2{'C2H5 _K%7Yb(:Tױb'zܐ(k;' l@Xc ƍc**O z@䱫UԮ@zF4`(RVT/+@;K>7'x[׿p)9tZ/icGE1C_QB{xQY5M{mjpRd XMBB *z#cf#"*?s^nOl&1oտ8Tl! :W~ʆǦ0}71y,x S?o _ ҳih oZ>FQR{~i&Hy)<2$=˜t_s# hM~{xӺax}ԭHՓ i/b%5zVwBh/_ȼY}0\97UQ|m+~ H92#n)8 aN.Ko@. (f ]g%܈ɤöԭ@l^L}pv3 UYks'3+#f.`ڴlH*lfYT jDBx рCv35GCÊ $zo|kjrqBQSn>JD%Q\!Ӄz gvV@?Y @pt=lE{tF7=Ql%FR-(+; յx=ؕ,1PZ|`o&B ly,ILw1Jvڢx+\bH)mWAޣPrs3RA:m Qbжة[wq]>#;âhk»eu,r !C `+B AjD(rA cR n[hr(h= {>`<  t]d `k '躁RVءN h@QT:tVx+# .0'՟BZpᪿԠ-$/VN .= ,*x2&n@C>S ^`oZ[48M&RX24YAD& Y!O fpةz@hlV(USF] A7 zt^bX+uS _ڟ@5C$0'%RBk)̀<@e4v?xi(|J 4t@B8]66o-A*B@i1aiBcIcl JDC_-N5"{dO6Oр_kjc`5{4lgDb#b2l!*LƖUtL(Eo{ ׄ]+Ъ: uELe'lp'5ZmVfa4q"b0d|$^4phK=MMj] ) Ҥ*Rm\Y QCV0m0| & oɏ[pˏ[pˏ[p{KW;%tEXtdate:create2022-03-16T11:51:16+00:00$AW%tEXtdate:modify2022-03-16T11:51:16+00:00UtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/al.png000066400000000000000000000030541475545702100261150ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE     pf 6yW #F =yi  q~+  x$C 7v0%ud G Y .H !b b Q X >T 5U ,tje -l:K mS h S Z ` 8<] zI U B R w?@ /M a  A O L s(nD E c !^ [ }'CcbKGD$ pHYs''iQtIME 3 IDATHUWWA]ww,!@TQQiIc!jF#h4vEcOf'yavf{~`30#' 0Nb_;#CB1"4Όx0f8#,BCJ`G"pŏ GFbE6#A "9 &l(>.ͅI8-]*g@Rr*=M*IAԚLR,PRPP+ԨYHDv!W !潆q8אI Q`,,9% KK鵨XG03- `Z *2 ?(Uz U\U)T DރLR-B#5#$roilpԽGrYr߃ه&5ZVrpNe+Z vOG6 ɓ!&1w?Ar{=&H}!/K]EtDB3U7:m714IQCqب 0ŝ!q,zspV3)$dLw~am]2-ClZB Jaxumm}#|hHlS+m9:xv 6 wI'O88H$ [hS G'AZ AiYWיtmˋCEivu}}=wA!!Y_?/A %tEXtdate:create2022-03-16T11:51:13+00:00vn%tEXtdate:modify2022-03-16T11:51:13+00:00LtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/am.png000066400000000000000000000006101475545702100261110ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTEarbKGDޕz pHYs''iQtIME 30IDAT8c`#  J10`()p!B 4U0{O/%tEXtdate:create2022-03-16T11:51:18+00:00t: %tEXtdate:modify2022-03-16T11:51:18+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ao.png000066400000000000000000000027441475545702100261250ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEPN}s! V J<m13A(|[w@$dnxo ޡ=VPSO ô+('$D@$" vaZ̽@;52ȻQK}ty&$nfŶ=8-*OJB=3/.*%"FAtk# ~uο95[Txo^Wwnǹng!vm,)LGrj{ia2.OI <7PJID]V>:e_`/bKGDU3 pHYs''iQtIME 3IDATHc``L,gecn^>~A!ar !r |J*d$55ѭc lidlBfV@N`xI7@b<.0`TX+A~pN@EPp#8Q1q pNbRrJ*+edfA99y$_PXT\R ᔕWTj@hUuMm]}C#J m]=}&n@SN>csΛO /]l$ya ֺ6nڼe+߶}]ٻo9z4Bo9qgΞ:Kdko,wIB_ÆG$'O=rǒbL`'~x_(3@5`d.VS+N%tEXtdate:create2022-03-16T11:51:16+00:00$AW%tEXtdate:modify2022-03-16T11:51:16+00:00UtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/aq.png000066400000000000000000000026451475545702100261270ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE:}9|8|F6z7{8{MOӤ菵u^TW;}Rӳx=;~α뚽YrQHѠb4yq۩hE|9|?@Aϱ]CЖd؅Xy<~wKRvݮp9}ΙLng5ys{AϚVYՐXIIрJlcؑBд>mڷPOӥz|jهNmB>Ϝ拲gUVxbKGDg( pHYs''iQtIME 3SdIDATHݖWQZTCS$MDTZbRDAY5mfQت{PN_p'{ ~;?~{g[0!?B@ƄTJ!T̖j2:m jw̜5[ [jj%P/q!6trS=-ۼH#\DI/x6h$1 M +XIͮZkfmY:NV 3mvlM@e4RUpnqm6"4<vJ;w `@6nĮT߇s)_zPakgtq>sd!rJ$vFlsCB+ y&.p(b$qo.DM $&5&"Е~v#z-$\u3h wGɛ|-$owxۍw5|{([? =z]IN\}тԫH1u5y2R{͸)rO}3g@HÆ}aOpЇ'9Etj9JF@J@ 1 wjb4ѥ>4m%tEXtdate:create2022-03-16T11:51:17+00:00J%tEXtdate:modify2022-03-16T11:51:17+00:00_tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ar.png000066400000000000000000000014551475545702100261260ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEtrބίɦ˪ͭԾϱ×࿑ݷݸ߼Ǡͮ—ڱxϞ]ȑKǏHԿȑJÀ ҍɑJڱyØ À!ΰ̫޹ȐHӎ ב ݷɒK ǏGϞ\  ҌьݹG bKGDMh e pHYs''iQtIME 3SIDATHR0@ҋP^ $PP{`;n_xyΜY$Ʌptq 7Etp1Q[], Xf#ҡ,2q1@tÇDz$`i4O?5c6_,Wm[u{*6F욳7;{hGNɐ@d8#rH|7|u,"HV^ڕc\ߘLC/eĔk!i:5%IH$?G+d5I%tEXtdate:create2022-03-16T11:51:17+00:00J%tEXtdate:modify2022-03-16T11:51:17+00:00_tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/as.png000066400000000000000000000053721475545702100261310ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3s0 IDAThYlT{g=^cf%51D]VUCJi^Tj<5VjTMHԆ$fYeˌgsO] _{}WPAbV$ ٽ}` 1r%M.҅h^~iq݅cj'=#PQ `^ϟ(B^jHLeJ!A+V߱Xcn׬g5s9:/TiR1d*= r@q.ElL|g;egpqXJ5bBbv>}@Z;(8Eh]}I;š4(Z&li+,K %5 ߢ~j4ÅiCa-.)ro ڶ][n^,k]A 2}Kvf/ف.:Yp%|[ܜr2% Ic;{V0Jj %{bQL=B4JH)H9t"ge9.]c'N{͢&%u>oq{ 8X\'XoL WM]Ks׺ Iӝ`&}8 gHtuЛ*iS;W/4m 4!ߢ9? )L'hSXa$:,廄cHÏ DwK*Qh>6T{~Q%!%9@bILj|Z"q#u!"U-\rt´3ݘ!FY1\SoEㆦx4/} %Qs}}c4/V\鵨$m,i)cs䀉)ƣʡ2cXZ#i7JXy-f!Nj pFrϢg"S̋ل|&i}1h$Rlp74Skq΍0؉&4c,k^ǘ~HY 4&xg0)\xj.&54MɌJ%Q )5f5mid])'\"-'1]PUU9}mz56Q%-|{-2`L$$(i\n1Mou75=l kfӷ&ϳ4\%tEXtdate:create2022-03-16T11:51:15+00:003[%tEXtdate:modify2022-03-16T11:51:15+00:00dnvtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/at.png000066400000000000000000000006261475545702100261270ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE/-.,+F,GGbKGD ٥ pHYs''iQtIME 3!;IDAT8c`  %`T .C(F*J p bTb %tEXtdate:create2022-03-16T11:51:20+00:00Ʉs%tEXtdate:modify2022-03-16T11:51:20+00:002tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/au.png000066400000000000000000000070611475545702100261300ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3g IDATh͚{|TյǿL&$ y 1ޕP%(h" iQBZ.\(Gn bV˫ Z%R(!ȃ<;<ϾL$@^|3sZk}D}^}©:ؾP]](4AjW .K tRU"7qs4!fJ@%$ԟ ,C f7$f (RjOKeժi$'/b@7E'i.neh| DWK"t.E[u2w8,\8?|3F( <4,x)nٍ#޿ 9ӑ R9c!1lK@L-֜8s ԄM%a/7a>Zv:Eqq5=54Ǐ{+Ks1VJ?gч?4I2xp(Xvj"ޅG)1MÇΟRM3y8;CGW yi>22y SY\2sI\ƃKf1hD?N *>?L<&3?M4#tIVL(W|Ǎ"0Ŏé|Dzev w 94u7W1ᑧcq^΢cX54>"y,v0|^Bіc4agS~+5 ]o Q԰aQ^{oUfx΀iFoFZ fyxX-|% |"{Py'[`:!)XG:"ֽLEh|((׏a201Ex?b:˓ҿ<7؇H,CEn2]Lvv ~ HƎ@J3dtfJtน2رsl6]Tٵ ,Ù3ߣ1' سE L;"vE+t!%txf_ʊHIyG)Y?_j׭,?.kŔRSE\nIP>9#h.|a4]Kbϝ h4JkwJbSDD^X[j#^}CM|-, ׿/c9B^^M +W~@AA%Q<W`EͿcQJB`=!܆zOV!PjuZ7KNw^0'!kN~v>i`dA~ jjj @R!(8$4,(@ `O 1)9%5-=(?0BP['3+;'WA-/K @F&)2f$j:*P"3`eUuM&)A蹱EZ;()P;)220BO!`@!`H!`D!`L!Ԁ){@8)NH'ύ0< ߰[Qh%tEXtdate:create2022-03-16T11:51:18+00:00t: %tEXtdate:modify2022-03-16T11:51:18+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ax.png000066400000000000000000000013301475545702100261240ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTESRPk_ 1444 4s5TRRQOk`S(f$dP,+g  1o;(;'1*3&-<' 5343=(='2*'- 'f&e#dP,)gX(bKGDAlN pHYs''iQtIME 3 IDATH0Bʼn .TnIMeI'@’)tFY%'!)_(I2PU)@#@(:pt@P@T3fI XQ` l8QTX+1Ƌ sp/aFx&n=;*cit&\sDNwtw%tEXtdate:create2022-03-16T11:51:13+00:00vn%tEXtdate:modify2022-03-16T11:51:13+00:00LtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/az.png000066400000000000000000000017561475545702100261420ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE:M:M8KN`eun}csJ\9L8L(7'7&6LYAO'6)9(8)9(8oz`lGUIVamq|DR&6fq^j%5'7%6+;:I,<*:;J3BitwIWkv]iz'8_k/>FT9H~2Aal(9(9'8&7LZAP(878684678JKb`kh_^GG5757T6S5S4S2S3S4>6=4@6>4?5sbKGDD pHYs''iQtIME 3J(IDATHc`` 00jT22Šsp \ܸ7/07> "KHJI+ J؀ vU@C#ucS33s K+k$`fcngb ֤l`lfBNPK\]=,=I0@EK{_?@R\jaGGFPd@4iP1D# ]b $x !1)9%5-=#3+!;7` KJr ܠ?` 074RF 5`*hnl>%tEXtdate:create2022-03-16T11:51:21+00:00ox:%tEXtdate:modify2022-03-16T11:51:21+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ba.png000066400000000000000000000036231475545702100261050ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEEEss=1t߳>2sww氰II O?i@3r tt..uu33N?iOOuu&&??##>>DDP@ivvJJP@h Q@hQAhRAgRBgKK SBg..VVppTCf((<<%%99KKppUDf筭GGUDe ++44VDe $$AAVEe BBWEdCCxxȃyy泳LLXFd 1100XFc ''YGc99 ZHc FFZHb**22[IbDD\Ia EE\Ja||豱HHxx]Ja MM]K`^K` GGss_K`zz篯_L_00--`L_ RRnn ))`M_A4qeP\7,wlobKGDK pHYs''iQtIME 3i+PxKU #n1ЂlHVH!@|Til!!`jRZ }|k1$+' ȍDs~!X ħF) =f,Ƴ?AOh`-&>Ne-, &OATatmA 3HIl )-Zl[YP.g@ /VD+R_7_CxbB ],w%K.{7୷dx]֢IApW3~P&}Q.>Q ">mg_]W~BpJ%p_טk*MkvvA8j=VXoiCs⻺ieۅ;@$iFJ7mfxGO>@y;ط{_wu#!]R^> /bi+߁޿ʊ4kGۅTşyG0 ZzZttXCa u#+ xTQ@~G9mfgRl_OzU2"?w /PJ X. X-c%tEXtdate:create2022-03-16T11:51:27+00:00 #M%tEXtdate:modify2022-03-16T11:51:27+00:00}~tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bb.png000066400000000000000000000021641475545702100261050ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE&%&~E$&%#$&{$&$C4 L< $E!Т%&  %͠"#gPaK%&"@2 I9 #%̟\H pX#$է!B3 ٩ M< ԥ:-(۬ e3(!% ӥޭ!,"n#զ*!!sZw]lU~b&˜ >0 #4) ˟#8,ة &A3 $'|a~t'Σ թ 'kØdN—g k[G ̠֧ !0%$D5 K: 6*"%"Ԧ%"ڪ ϡק $$ bKGD( pHYs''iQtIME 3`pfrIDATHc`L,80j60xx9n$EDŀFKHJI)#+'/D EUT544Tut H򂡑)!ijIb,yzys:pAX5BTIMa|"c8CIvAl\|B"ȀDd2R~JjȀt N u/(,'%eUe5d.\T ֶ K~ώNr `2bOo_9*4!6Y 4%_"QnT))T'O:BBuL@'P%tEXtdate:create2022-03-16T11:51:23+00:00li%tEXtdate:modify2022-03-16T11:51:23+00:001ѯtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bd.png000066400000000000000000000014201475545702100261010ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEjNiNkN gMdLbLjNiM"`LZRIDF:D4C2B9DCF[RIiM4\K1B*A(@)@)@1BcLGG/B)@)@*A*AGF2\K9D3\K>YJ3B3BiM5\KCF#`LDF/BGG"aL2UbKGD/#  pHYs''iQtIME 3`pfCIDATH[S0S.[MhZ?OAA f3 !Wшn?iZܲg}X{z#bQн\4pQ X~L`GR^VZuU5>HZNҡLU΢;/&)pALx "(^%bV\0^ B>o@h$ DD1^wY ꈁKg lmy 7;w.^|1tt[3-UI i[TNVqKMIzm٪h2?xw:|%dĪ#%tEXtdate:create2022-03-16T11:51:23+00:00li%tEXtdate:modify2022-03-16T11:51:23+00:001ѯtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/be.png000066400000000000000000000006001475545702100261010ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE 0/0zbKGDH pHYs''iQtIME 3"m%IDAT8c`!(pM  F*U0`T̙wP֝%tEXtdate:create2022-03-16T11:51:24+00:00=W%tEXtdate:modify2022-03-16T11:51:24+00:00L!tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bf.png000066400000000000000000000025221475545702100261070ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEIU!\[&%cbR}>@(ݔݖ)KKKJsuKKO32KM8538wy4942QR?gfDCmkbcGCF1shjqHo6rJnE9:,TTbKGDW pHYs''iQtIME 3$MpIDATHc``d00 `$d>)3"YX)1"(0|(0@DTLLTl%$%5@FVHLLHN(*5I 2 +#>$54@WK utuuA@_F&fP'&/%15D5*hD@a{&4 NhM)1!wOgtN ^?) š aX@xDd c±(eP'$cQ݀,d9q%/U?2]PPAEBFGqt oK}{GyFzzFgW70O':줬P_/抔;L(mz*<儎*=萚@Q)Ve1o|狕-?^bKGDdڸ pHYs''iQtIME 3@>IDATHǭVk;BA\aK9D7INIJ#r";==ӻsγSYnw4s%7鰰(+^k| ! ftKN$ijTzOF'dsyxfu; o֠h;<lxRb'`I\C..'^IۆBQ{ywzPd#j/t#FPo "ʙ/g:4/DH>#l$g;[(VD`c^mr;C X+Y#E`}wsyn*%tEXtdate:create2022-03-16T11:51:22+00:00^b%tEXtdate:modify2022-03-16T11:51:22+00:00/FtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bi.png000066400000000000000000000051761475545702100261220ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3%J! HIDATh{pT?}ov7oh-P(*L=J;iuvL:NAEW(n 1 P;=9؜G2(I'#b`W(=R"rټțxl!" rh|յ?(m9igA, ;HUx7mEA!]GqqϸeKpP;4q >n*{|/B:c02[gT\q;4~ɚY{^6i f`~=ʟ86zk$\9eګJ@z0ov^~ +,3e̸n340qDOӸ4zHeuOiMǒCڢI? sVfBskH29X *#_x${^m {MYYrQE(!RcULIA1&e8D"f-!(덵1%(kqO)(6qƞ8w(({BI k*rbߑcqֆFMO_C5fЭ|s'XSTm>r{$4 ,)=YSqEwa6m t[")a3~-1?lce:lEt58M)%_|͓/t 8[RFbRŹ)V,(?J[hol>kn.cű(iEX`mb!**1=G˾Cܟ3SKxHM˥jF4LX-eDOl`}fMB1դo7"Bi>Ď/0 |b2Bw ףzUjpjacNӇ_nA-B̤,80+*hxi!<B0}ޓ8TJYql-;w1CN$:)f=35A{pB6ToLċ*VrA*|bz,!}nL፶yԳ6՚p m/wdcS/,\^T,i.%zUE>Iu`QWaW/3,8[+'߆QZc.UN y9(INp[] pR_RR鯢%cƿߵ62\wP;=zœ tMO$ MnO9,D9!ug^a~/Iټ[N B 2xt]]N., qa^31^Q73M IZɬ`I2NRX4 sr'901ФNC@[aRTfգ}9;D8vthA,e={ &B6(:+Ev7{*G?Ǵ LT8]H0in n ׻~ k )#:S$QR wt)6"*~ΘB^XJfprRcW;^PaZDTNiBXBP*[*$^:.q#UxEXDnb~ yoS9#V;*cDe bٙh9|"5m\Xw1UiyqfMcz8o6_yKn~v`aj}b1,cv11m 9BeQE ډBtO;or]S rV}z:С#=W;кsT Kb&x|ȱX 1eE(ٳ9G.'5ԅۢY".I=< 焱)/Fv|=_\18Fa={5ZhU rZw!Ti.h[/QF"r@k=;wUP}*{?ڟ紐O%tEXtdate:create2022-03-16T11:51:37+00:00M%tEXtdate:modify2022-03-16T11:51:37+00:00"tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bj.png000066400000000000000000000007311475545702100261130ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<HPLTE1.0.e56YZ! YbKGD ֘ pHYs''iQtIME 3%]aTIDATHY@0DB!ZAOf TAn  ` LH@`Ą\*=w5!pАYZ"%tEXtdate:create2022-03-16T11:51:25+00:00\)%tEXtdate:modify2022-03-16T11:51:25+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bl.png000066400000000000000000000005771475545702100261250ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE&%~'1/0`bKGD ٥ pHYs''iQtIME 5!}By$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:53:33+00:0003%tEXtdate:modify2022-03-16T11:53:33+00:00An tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bm.png000066400000000000000000000070011475545702100261130ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3%]a IDAThipTו^nm%B7 Ĩ 18`P1&b Kc ;@a0 !@RKj-Vw;?Z8fj|^z}s)/@Xz^Vn$))9/0EJxi-y Əe\PvS[ hL,z}4)^xI0O-"bn򟟃QCu̞= ];35p"{e ȥeFߜOԟ"~@Y?Ǔ΢tQ L؇>x#3Qq4!*O?0[_B(]ޙ*ԩ7(XjUل&'R8wg.}l29sFNZn|9e`%Egxh:RYUƍZkP3_,(sH;3=DlL8 wcVHnuO1s yX֯}S<]V؃ُ\{yU3wۮ} 5"w[4~x8aE>&%1Yfv׉ag"o- f|qiȑKxX`QPo.1I!aBS[Qp-_ŕOn)XMƭ8ۃblhyΔ0wGqc%DbgOӘLFbc#@Gu0WX#DBv 5 wQ0}-u@ٴ,*ЩLшV[@^hRMo) Z3lAZnD*5Gq Y*n$L!PW٨q{bu5A(%PBo!"n6X*hc&O, b|)īSš$@( RӚqգj{Xm3&k.i7 J(8VjKJ0cPWz YtiK_jAj~D=iq-yj$/WݻfC7˙3|NĞE"*6kf4<;npLa7պ׹1Sm7m99)%j~ס7tUPqCŸ>j{OJ.oNHEݷˉDee X~ y) ^}4$?CѢ5t[m"eo}* GQ;l8ps߹V-q;17^D/]㏉q)Z깰y3mz"":(,f>!!z&NKv(< T})E ^/ɳ5>٤#ͯٯ'm͢hZ,+t2S&:"߿{w}UMf[WGuu5 R2@&VǺuIKZIU\BSD.{,Z&@jk~RkڸW8s^c^kW'm"7ޮ/5 d}F-b2޷H:ߎe˞`Р) WS{$Fc2ys1O"46n<Ν'x㍱NʬcDт7^İo0ͯqd }9|7A=3;FYh:3Dx Ww֫TԟܦU̜9_"55b'/]hWӵYR`%)tޒs71oH&Mi`ۧSd=%#!<_Ž>]*$V;5躷xtd N艌kT=<1Ж{cUJ˱L?Xq͛wssD_r'N1wR2RI_3c.| xzhq|ewMqavSà GdR*mҰBpd_g'U#$eNS9 X.?y ˣp/mLx cofl%r-,]62H> cf _[CBj/#SC9J2Jly|C(,L':9?Zh,e'K*HӲϽx.IS'ץ/~NpxHRܘD\R+>[u@?BHÉxE"6.b愷˦}4P"&?cҝDz;ʰi\>W*?"tV5`x}=@O.ׇ.1Z\.msD*Q<|6-՘(0Zx~n~hFX9 xWQuS/^ebyrNu8|ؘ( ұC'&˿{v?2h=veg1Tirt(lh[TB5PV ,Avhz\W_r!!u:)ڳg]5bHlNAVRExcB.]srw5SfAHߐ+ȻLH(Zrr>&-*oYmjH+:;ny!izq.FI)ITy" :}tQoͥԶ\6{FUt!-#92-KVR)7Ǣ$P5Mi'wkBvT%iFPD/H!@F!](: LyA O (%#՟-``$))V_m k"^Al1#qe ݠR!ThEbWD ,¦uXWtU;gEt#)tb<W 00g~yĔ SUBdr":]d2W45Ck@,>W{XQ#iY}SDBXjs/f̙h/[^:C81"wE^LTqV=iiiatvvrmԄmOVV>8/_.Iy.~qNnkK#rs };llgm477swɲeX`pxҍR(Tȯ(#@Gˆ+U7B- HC$:W`c3RX˖٦f֬Y,]5kְb ڈb;GR>T1bXGFc)ZYƜǾIcLkTYիWӾ&us:>O.|D0"y|w׭߼߿A<(J)L8O$ұeY|`f(ڋ,(ϣ/zA#h}βs oo"ܲ+@YСXP(q%v6)E%w3x2ZO%}bQu֌=U[,=(~.GU[hR?8߽+gޓǞ:Or=/>j$zzǑ勹{Y>*#!mET0PuH`1g ޷+Q@a_x|&~"S nBG?;4Q#fWj-?ZfO b PĊ'lߊǨ:B僣DoS$?t00)_`5`EVë #p$kP] UZ9:[^^$o4K%Qyuu9!P0 <,+ϲ_ap/CgfQ 0 `&ʜ$V^Sbs j$͏zoΑLtѢE$)Ps:\ɭ~q{Aswh pln2xf<;8DN؎ 2ϖQ|9 kztG Ĕf[G ioogʕS*/ 0ќ~2L夢 [rͳmm~0I2{7g,X{^Jp­>w)N,mx(TK@) +S) ,pO(~Ax x6 WX1ah4PDfvNSs)}ºx2D\iuR\ɖ@U];(c3!ؐ2e J)+V  Av'nLi ?\b#S՗)|BD- pA4L Bi@aalZ36Mɾ {-wNnZLRr-,_lzOMSV]VuN q!0S .mȾXpO)TD1>8^qru#q@* Sζ @WSnZa]_7;tms=vL#`, >tWBP>reT+ɟD?z`W p%3s/3.ݳc(;a\!ӄqL4kwnGaIW`X#S(EW-ѺRI a(P 5 `"\.C2<"QQ0^6w|-%tEXtdate:create2022-03-16T11:51:33+00:004i%tEXtdate:modify2022-03-16T11:51:33+00:00E1tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bo.png000066400000000000000000000022301475545702100261140ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE+)@ )1 (z' $RK-^J7REQ>/PH-"%ߗyh)YgfN0cQ)Vgv=$)-{Z\Ymk@0u@I iTZUQjihR4i'"*TLp }fggg=?}[DiLO\b"l&7l>K)Z<=-4 JVsۻ :kຆ,_%R]AY@ޖ<7ʿuq!&l&T.h0mzPB5K`kPxfml+mZInoMUCwJӅ3 [Ȁ:!'L 1o(-B#FRKIH1 S3%&۴ʓnglnyXl/—&9МnTKn.E9=t' !e7nLKh3cR2ar#cûd@wgy >KTC]JE29qz7Otoby66<͐P0Í;3]BZ 6fDOX* ֜'N#E=R1g?s'^_1$_i1Likˍ<>x2Żbo+#ٮqvs @1dya>,Đ !D%_: @JevƧENmFHϪe^[]ShhK&ufcrNosrNrc|``P %ϰp[i%y_myQ je+tҚ5碔5?͢\m]Nlϵ.7!/ˀ*><68‡Z1@!}QChhxz<#y}[hbgOe5Np霟X27H#4Y>؜%cYEue6\K Y?]u˕(%X'D8y"bCX.M 'B\,kMy::Mn W+&ޔ%/v%yZضA>uOK/F`2:L:N>;e,gx-Wh89(!yKZ>ܴ;Jc p,O1ʱҌMdPJ#Rh.EYLn-ΣZ\mFNkQ//UbBh 459ad*z&J+ E*3i~<&/>n硭=Ll&NxIk!j':o5#:|E14r"MX{{f+^ކ\Kv11eb5 Cۮfiy0- |Gx?=֎@Wb=Ԛdwc&b|ge8!`ML7kU_u [xc C8UaƦW0y`׫> +'?敟;XWxΆ[*|BVaDJI"j_u)t.sO -ǰ*yTbqaH>|[;L\ƶ5J;gJdW5qAhK"wruKF5i-xuGSQpB*;m-8L:ȧs몺8BkA1M!C2@'Ig$S%,[,Ԩ+ ")rI~\ުi2/fvz@ʣBh E7ߛKHYO'E7_˧nbVm髰N`.. Δ1MˬzAs)"M˿ChFG wrFb8!Ҹ\8 u/&ɩnJ. c!QtD咋@Z/i-Y)}D7Χ(}]AdsVE: lIhxKHgfu&uky.i!]* WQ-xh]e4$˕͗ :eo_oٹVJb iHTro>M:5ʪ֚eJREiۚf]Q?ZW6s9rE63Lu*>*ZJ|  bln@}xbB͋a ^zyꗲ!c+hRY/ܰƠdT iYRY9M#h {hlpt3㡻#NC&r^it3w,W,j5(DճtW¸ E Gp%.EDkEh5ģ~Ђr)PH)l&6\ مvG=%=) ?;ߞbZjlr?.e/'Œdt yJ5WuevR f$Rƺ`ٚxD$3)1_SQ|oř+x6~*l-b~CbSkA!ÞQ.ƘN:tCKkMC,Ltx=nxSC@6t;_=7+K!gVh6 RhV-gA"ޒdVҔ\|SYe]ضʖ*<}?kY+I<9I~ۨ&-2{ݳPmwv:ҍm594l ܼsx\e9@292ΓL左卑Bi40eK#vz0b*DZ;FOlTkhT ?c˭mp*M;l4q_a^6jkvMWU%?݉_FGTwpN&1D樭nng_GΡf`2JrZ`WvBD0l#rMsolisDuK &<>Ti5÷6qF n8Ժ#|i'֧^=vַ4*,%y~_yg'`ؼnnl?B d= s,RpBt5q',{ZU[%tEXtdate:create2022-03-16T11:51:29+00:00\6]%tEXtdate:modify2022-03-16T11:51:29+00:00-AtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bs.png000066400000000000000000000026241475545702100261270ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<[PLTE/FG(+,,, X[ x}8:X[ !{;=\_"$>A`d%' BEei)+ HKSt***** <4 `X  ?9 g^ $!ZRGA$ d\94wSLʹ.( Ze79 +е0Դ.Ҵtx MP+-fj@B!"~ W[46ptJM(*bf=?{MPמ^UbKGD a pHYs''iQtIME 3@IDATHc``dbfa%0sprq xy xED%4l//`Y9+"D ʼpF# U$TxutI1A xyMH0^3s !%bMf/5n;pqus$ pO0470(8$4g/oxDdTt '3!I)x h/oZzF&n0d47;'7"x )1 J /+  ȫa ux74OG hjni%pjoJ#p? eILF`UfϙK j -bhYx K-'jB7@kJ+P^ŀu7@`׾i󖭤7Ql۾F̀vG^}6@?p*}w.Y s(-eǎ _%je%܌2%tEXtdate:create2022-03-16T11:51:22+00:00^b%tEXtdate:modify2022-03-16T11:51:22+00:00/FtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bt.png000066400000000000000000000070021475545702100261230ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3, IDAThi]u{8ý ~yq11`hND)IH*PJVJVmh~KU*UJ)BU$(Q ~PO?bEPRW`ϸ˻>wW0r h%Ac|x˿0NE1R D43rښ?^A" A$KkthK Ά*Vgf]QBDb0vETen$7OI5ذ%(qrO^Ch  "jxՃ#IN}mjS>M&kWPCy4T&%ouCr&W/EF/E][@)4+2U-QuN.ZRMTG!;~zx(e3Qw9W6@hG#U%>vXO9tV/(!!3)z~kgS86Tk<9JZ1$ =}}Twd旰<\-*@Eddti|l7h(q@DI dҞ62m,cFϋ^m W(R['e+JyсN-svE&#,Me< lLo޸JQ$5|m}FD]D!O&m (Gn܁ >ֵ$'ً"uD͑ 0a.YHh6X|~|(*lz`/%8%hEAVHk{"Q2Qtx [-0Xi-|Pq|jل>:BA:"9n]|^}5x8@7;KgVgSeRBxzhV0FC; vمBhz8>J?O~5M\KhضKRCb,-4 !KAkR ETw=rbHs%:4{Ԅ]- HǿI X! ͤ3<%"WɋJ%{( kh(cj]ֈ7[M+%!GIPK ce k_mpѝ7Qm818JE67iDCh,0 y k#Tw/Avt)x߹^E@'U\BϧaVE I| M}Ҩ&~*7hxAk5?y_Fa |M=ۈ7":=)j%tޅ @Q^aA(!wn%LRP}ۉ^%߹; wIӇD}[E@P,Fpcty{ODcƗEMEPiJ5"! R!1cբ ͥ+Wc: {}P b=^S^"kyڤҠڠ]g@^L[ɦ*4:>TB\/g&#)X$iF_8v<@y;"B}ǐd"s/&A6cꊯ !ޱ|DXH住qM(a(6aZP Xchg9Iڔo)gBȖ5kY\%< C'x:c!پֶ~ ޣ-ힰ&ٛj!YI>F{8#JR饲c=>BK+ўz57NWχ&: kM{3ƗH"K9Lݵr: :Vvʊ\KGsPpIts$8>Ijlr^R{. x'.v?O%tEXtdate:create2022-03-16T11:51:26+00:00TF%tEXtdate:modify2022-03-16T11:51:26+00:00 tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/bv.png000066400000000000000000000013571475545702100261340ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE(($$膆978F;;&&8٣%%!!脄99##WWTTffVVz}Nu>d|56:e;f%T;/]EAADD\\__))[[''++]]١ءWbKGDH pHYs''iQtIME 3OIDATHG0@ Lfz'w( dc$*$Bfc͎N<*v`aZ$JbDTdI.@[@Ȍ\_bIeV\( t@aTk_7d@k xH}" Hո`LLjyE[,K>䦦⟟hh;;⡡ں鶶뾾wwYYUUXX؀䧧KKtt܌㢢㤤ccݎ++TTYN"  o7JI&&MPȋAAΑAB٣[A毯dgBHH??=@p5赵7:SBߘ▘B⥜`ff☛ڝSVr{}b'قm__嬬ˎXb)bKGD۶x pHYs''iQtIME 3`pf~IDATHc``dbfaecge$0p  eY(* *) M-m]A=&} 0042V61U53& iSIK+kC2ÀYΞ[ɂ<]\=ܭ=3@WC? 0(,BBC#B#c D8O)D HJv`JIMK"/ sr D3 H.I{}s Ec1># /kIF/iSf_t dEP$j#^_^K`bq9)tRJAf΄Xl128:I[(';硣O4N. r:aռ\nE.V u42gQq{xf?܁l $rV%}c1+ܸo54Ҝxv;MPXYPhkmTij ^8Dꫫ~q˪ EhEUKy~/ D>lf+Gc>R0x=($mk%:0̹& F#$'JܺxNu ONEK0ܒ,{p=氣Béw{H0.2ٸ˜7x>#,c)6kWUES0]Լ|}]>|LDBXg1kĎ߲bM *|r{V[̲+ױqoQLQZ16d=B[%ptYNȞGvUAJ rMHDp$Ci|PnVelὮ]lA\$=68e=祫u]SU8ll;pPX f RWknF2lD#Q[; zǘ_cMN'˖/af3IDqMPc*Kc? vA H (|V2`Ay&+ Ma$dv-HI.ιӱFJ ғW3s-[~m*rq!c\s3p9DDt%^9s6~ GNpo"'eiwæl':Lq[0(p%MdI|N9Ggu +/ IGk|皞eͣ2\Er<-#5R^Ǎܲ8Y@F Ɣ2)*c?t.tl)j눷&Lf&B%L=~ #K3JI}eFoP^or3o|4AUC0 4`Rh;t D~~7w+I8V v4cP"I 8~篧0SLx^?]$DDatm2Qc$Җok"a=[9tKH6 nOk+(_w7?1k'@݉(BUA* K,QJ?"S/SH@چ&9oĬyhD-Yo V A>H~b/b2(N4D\-S#AׁYl;& R(K~ HYɫc6Fyj95MTȟ(J$FNd/!u JP:F<#9j0'fR{ndDÁd7z_%yX &E"ig,b6pX22daXcbE ɌaȊըr*8XTb=VS3 ukG󵺯? IB (0 [v@ 8RS5 5> e&T_hC=h2ij(D:<ʺTnʱ$fNQn.06'GD,I DW=r)hCm8 >" I'6-XE)żYNhNBÂ@4򛏚vqwιavJ$DvB6 ()$8r֢HZ4Q'P,"JOb Ey'wb e[$˚ɵ)ˉR?{-afGSH3(̬"d$Yx ,go#ۜ)ɭд L4[.L&i O> &qV&/*,L2уaIq#ԗ݌͒/ᮄ5XE3%u},>o4_G3kpWO0ddt>nH,7̼10Q̲t#nSdl26̑8D' R*'#E1H)'F銶bcWoٯ6aXoQ^. KaY$`K$-yjr{) (x}4WF 99YYi$CYIɩJs,/N1itd l/(pwS%0e<#^F,p, ,$ Gax|*Yf/r+^:Pq7 dW#%ͅ"){|3oiaIEtL+c&yj \E,,/b0u#փ͊9|!{?bsQEk6iiOǮ#.|{qVQ_4U(eG͔:xtN=O^Bֹft/8} .ֳ9ǓxW|fLmH 1)0 L4323l"sy| bIIUA*8XS!(36/yBMRteZEV<}E&c[j9 ?{@HdlW%tEXtdate:create2022-03-16T11:51:24+00:00=W%tEXtdate:modify2022-03-16T11:51:24+00:00L!tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ca.png000066400000000000000000000022641475545702100261060ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE+)C7B6h_쟙茄PE'B7ﲭ졜*(茅ﱬ죞ﲮ2&bYE9;/\R/"뜖7*'/#J?)@4d[YNqh?3}yqH=f\젛0$G2[Q-!,荆*- .!<1sjE:菉8,wZP^Tj`*ulzq爁<06*=1QG7+."5)`VYOK@?3 bKGD pHYs''iQtIME 3'FD@IDATHc`@L,+#n0j} `jpprQf7/e1 k0(!bD@\BRAZFVN^,UU5X2@SKVZ[G X F .jeY,,YDaemckg1@ۉEUMH/{xzxIK€? [K?(0 Ֆf ,%-#M1`KK2D(8KC5+yi(`X?cb$JcK%΀tEC,r2DzA G 2ħĜ\4IJE&HG\K#&Hǖ ede+BHξb^jUjb5uP`R\jJFy:X!v2J$hD/I3f IE7$Z)3`D @sUԑG%tEXtdate:create2022-03-16T11:51:39+00:006%tEXtdate:modify2022-03-16T11:51:39+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cc.png000066400000000000000000000031061475545702100261040ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE~ >{y<,( 4/IKmogg+5r_#$uAE=R ~DP;w"]}@ L_n"zNdw1̣О?GH֥!Xi M=FUWM٪n|bcaO;` *9C 2M9bKGD pHYs''iQtIME 31IDATHc`02RɵvnnlF02  3AGS 8$ e1/šƯFM-m]M Lzi LPwM3fL' FٙMf#9gD# %.F%|K1.|\+Pd*ozi#?&-)n Фm۸QBqv%;vm qF~=PK5Հq220gF}b8G1v~h3r8xkdbBN2(^@N %aD"rf =IшD}%` 8y%cɉr>hR&τ΍i'd&M@ΌAj>uDЌ;s * FR` ppr%ʪPb! ;6 {%tEXtdate:create2022-03-16T11:51:49+00:00s?%tEXtdate:modify2022-03-16T11:51:49+00:00.ftEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cd.png000066400000000000000000000023701475545702100261070ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE~~9ɷSI}z0s$ ! TG8!!K2ϢfS ! Z?{.r# 3%oR [)0|(jFhectJfg\ 13θR/a鎱yM8~brH]<7tBKgB {zFDK>I!ߡg>7&_'v$eOu TbKGD pHYs''iQtIME 36,`8IDATH_@ %IQYA a@V5({NP(&RRrM|/wX֘86qbRr͞Q6N9A7Q]X E%N^J0)UTj}W녈om]ao66ݾeV#f #jxN۽'O}>_k[;::իgն$d?@睕ArohxdTF~/_)@w~/j&޾ ܜɩ &fR_a+/ $?Bhq *Qqogf_-Cj!mn^$|W?Q=YO {?J}`G<|opr~$J(vѦӟ{?-j&M赌Izv= gBObF/` V}](0'R$&=IB bKGDwFd pHYs''iQtIME 3*8y?0FƉ&&#? !3AD< % kpnl2E;3ppxvt 2ON8;7юLP"`Gůo݃ <='Ў啁w8SRb\F%tEXtdate:create2022-03-16T11:51:42+00:00tk %tEXtdate:modify2022-03-16T11:51:42+00:00)ӜtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cg.png000066400000000000000000000010311475545702100261030ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<KPLTE~~UAbKGDi pHYs''iQtIME 351IDATHǥIPqM=hwUá}WtlbЍs"uvow/ |tlzzzzzzzzzzzzzzzz'yBk){^˞`ck X%tEXtdate:create2022-03-16T11:51:53+00:00` %tEXtdate:modify2022-03-16T11:51:53+00:00ضtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ch.png000066400000000000000000000007511475545702100261140ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<6PLTE+*)7+D9(爀(ꕎ'$铌ꕏ\5bKGD= pHYs''iQtIME 5&gvIDATHI @Qyi 5BWL7ּe(c|T@f^ A8-u].#P2$hFLZ(_8%(pBHU~:SqE?`vǣ%tEXtdate:create2022-03-16T11:53:38+00:0024J%tEXtdate:modify2022-03-16T11:53:38+00:00CiUtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ci.png000066400000000000000000000005771475545702100261230ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE߯0'bKGD ٥ pHYs''iQtIME 3;RE$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:51:59+00:00V?D%tEXtdate:modify2022-03-16T11:51:59+00:00'tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ck.png000066400000000000000000000074221475545702100261210ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 38LM? IDATh՚{XT?kfP`$P[:I$J>ZYN Oi$մ㶞n:宴L3#s)"P fa`n̬u&ٰ]]#?$<;i\R[n޻ٳEnPF"q.㍥ƿGMڛk7 EP# n5`ZM\ 'ڇ x"j Ak8w1VSĶk+ jdݺ2,v>ӕ4 L e}JWߢG 3~|,(rB>ٻqe5^MRJ,/rV!jƮz Q(/7hQ)o_^%Gd1+]KFv_ap;(2Ɠ5q,Ӧtzɿ<HY Fl񿓴Q)47;Y| O>w$&,1C1PIqG0p+u4)# y['@Č0e/wI,y{oEeS_ҥy!Z5aiqPsᄹ_V0Eow2R)€ !?vPE NND7E:7]zsTaN{S!( ( $P"t~WI-- r!^( 6^A( 4qNI 3"# yzTnq/`oT `SFO a:T``yer{ 2[Al= 9|s (DuD:\:]h)ۂ ϟLEQvABIˏB ૳vyp%V.(( L²eiEQ:nڝ\8 பżzO=:f]wS=c~y*TRw=wHÅщŜ99X1qb>PП75sBsqWVNCo9mbVC[ m+ jupq:ns 떒78&;nKE֖7%qq,_>?i6,WLuEy!TMKg2ƌdtDGiiOP|UV8Gp8: BfF3.pQ~e,ZTH\\.WFMAA:*@kgAaʔqO#TrjM̿P_.ˬ[% l Nw2n*G3>>DNw(}+HHrr4O>y [LaafKсdnV5sćIi]LTxk/_dNև?tb* =gÆxd"g爼 ֽMu\ ԧm HhTFSTGff<^BSS;TV6544aHLErrs䐕-[{RY;%FklnK4BK䳯wNB/fM ٹ{.G̀;t$ ˸q,[vnEJR{iM&]-6LEH?xA*ioQ2 f;]]}$(U̟W/BLJCl1_'a qX|ƌD0Z4$N3w.R.?F*f4^ (kDy[=VaP,Mi6'Ѩ Qbi's\(dfƓ+1` of**q|63.ܫ0{^K QVKOecTV6KR KKhTxc.7~Y'$e0+$'ǰz呕цb+%Ann Ӹˉ nw Ǐ[wWٙ8q &FsℵjiJ%O-v۫L\=2]f`߾Z6c8z j >݉N 1]QX,Ξ@=\@`{ 81_黡 @vLIg$W"BXY.iݘL {u1yr[.bKHN,GѨ5BUkv PF#I l6'11lVI[ Af<EvR^nRZSՈ *D\EQ0ֶr>2VѨbJ%awrDh8! 2jųY$IZ'T.x"ؿD`ĸ@//N`֬Lz vUSScsC0939sr3ro(~ Kee# ~IeeCPDt:5--Ninv4 Q=۷sع{:7o^4~ S_h$m>zr$@7 E!Pxc\NM`'47#-CDõ{o7<uq ݧqP_+@@LZZ ̙Mx$OTFZ5QǼy9uPQ@zx<.NOo9#BS nx*_ѣ }2=ɀ`a6V.tl9֭ g/F>_^xb3^6n<,+Ʈ]U8,vyNzワU LpNh&~눈l_J?g0g<?6Ьfri%tEXtdate:create2022-03-16T11:51:56+00:00O%tEXtdate:modify2022-03-16T11:51:56+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cl.png000066400000000000000000000014741475545702100261230ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ< PLTE97P89-[*Y6}y A @530]0\:?jṇrtvDm)X%V6D~C9ԇ՚۠KٌOIra<:Y~RyLt;g3`Nu;;97P754L,.//A7D9*)+6{bKGDXĎ pHYs''iQtIME 3,іBIDATHIS@n͇FT&1Dn,ʢ P\<ĪɌy/>䩮LMBIK./A i`m-`vn>UpEGV.y+kid6ysk`gwo8xgS,߷](\,_U7+Ujкf ݨy&Ԁ _О;/ݞT\K_ѷf0 `?= i%tEXtdate:create2022-03-16T11:51:44+00:00^%tEXtdate:modify2022-03-16T11:51:44+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cm.png000066400000000000000000000012301475545702100261120ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEz^y^8<%& &X$&%&&#$&^%%%%3#$r*#%ijV {z)#R %Q %$,#$$&bKGD5޶k pHYs''iQtIME 3&1Cp\IDATHI0PTH:yFADQل5U/:WHҏl;ye y$@kTu@"i[p]hiL'v \ñ-~FqQ(N4#$K/'2e IU%BXus4T! `mWbv _y<j%tEXtdate:create2022-03-16T11:51:38+00:006=w%tEXtdate:modify2022-03-16T11:51:38+00:00GtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cn.png000066400000000000000000000017571475545702100261310ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<#PLTE)()+&6-[ p 3'O n 0U *l ^ :7.;>#Z I ,J R P 9A a a 1Q F /s t (@ S d 9b T T \ O G 42X 0mbKGD`ŷ| pHYs''iQtIME 3.?nIDATHIS@QAU@Y(:  HQ&PC.~Dq'L8V.9nBU57fq ]F2BA` pDd8cQ타a'SiIrgd9㖤t*9. Yg. R9(rXa@@LwRoJȹFu$(ZeDV9 v:UŠ8U^W=!Hlǘguq6Cig1<Sg!"=cj1J*y4TyzjmPŗ׷_E<n b w2Ή]`ɒ%KCR#j-~%tEXtdate:create2022-03-16T11:51:46+00:00l;O3%tEXtdate:modify2022-03-16T11:51:46+00:00ftEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/co.png000066400000000000000000000006261475545702100261240ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<!PLTE-|~FbKGD hV pHYs''iQtIME 32+!8IDAT8c``AA`0&\P`TTAPN0t 3 QD*`жB%tEXtdate:create2022-03-16T11:51:50+00:00Az%tEXtdate:modify2022-03-16T11:51:50+00:00+tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cr.png000066400000000000000000000006531475545702100261270ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<'PLTEvvvv:bKGD Qc pHYs''iQtIME 3:%B,GIDAT8c`@`P" a`%r`T`P$Z:(I0"v]DR.M;%tEXtdate:create2022-03-16T11:51:57+00:00D%tEXtdate:modify2022-03-16T11:51:57+00:00wtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cu.png000066400000000000000000000032421475545702100261270ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEC<;OPPP~%oEPO '`/KQ?C9N [+AP s(zH/U3 LI9<O"g#DNL "v6`ccc<< ZZzz--GGff$$ 2266ooRRSSSpiwGHI(( %_+ GNMMBBHHUUKKNNPP..$gwLҘ&fB<ٷWPu,Q<,.\2 ;zejŻ,,h*`\O1yFPg3 "ʍB|siD@D哼wN 'uS(E-HZyXk*<^xn&:ٗGDUӸi ~myR$.ﯜۜ@#ϩ6.¦2Z׳P]ˈ ʷgcl\c'/Q(C،jÝ>Ϩ$÷^YwxW2? *{w5fA}(KeH s?=&E( oBmAH z7nI DG< t rOAy*;CXUt}ԁ-O%@ /B DqB?SUm̈֠FiҨ֫ ^Dj!z'*p xxj%-AM [Zp 3Xu>&LbB"3&(PY_QfF5Բ1˿Dh^}E@cĝ\9v/D`o:{oV*!DaSڏmj µ:=RC<Dgy,~,YM{͐RB7J$ȁ3,Wlv γg(km\[HbQ.'.R,GbdE o*(2)~]Dl˹4՚2G.1[ʼv~̧83ũf3B'@UX>8TF2bYJcR'?|= $g> ox/3u=p6OԚYH]<7Ձ,W!(o2Do\b }Qr D`RbTU9fcVQ+y}_K> FU`-E Qn>oW.W}G%tEXtdate:create2022-03-16T11:51:39+00:006%tEXtdate:modify2022-03-16T11:51:39+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cw.png000066400000000000000000000015761475545702100261410ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<5PLTE+*~+)}%I(L)~(}${kt%{<<]=]ۿ@` E,=oD7l&|:鞯,3U$IB[v 5/00*~8YBb|/64VÍ΄Nl 4 6{Pn:f7'|^x)Mϋza{'}Kj,0SHf 3*:v%,Ll(6bKGDf,% pHYs''iQtIME 4b IDATHGZAˀh+8F0 9YhU \̿{JDqd˧rM=}!aFCH1/N$SSi絓33sٖs.vmhq8lp/\˓vX@,oD73;EV?0Ɣʕ*s =<2ƞi̜_N,]]q tQ==W BT.oͣW!&ޅBGH&9? A=o%tEXtdate:create2022-03-16T11:52:04+00:00%tEXtdate:modify2022-03-16T11:52:04+00:00S_tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cx.png000066400000000000000000000046111475545702100261330ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3/HSIDATh[l\Wϙό=I\I'u%i(CQťDB-'@HU($(z!ĉh&m]_2̜gzƱґֿ?Ԏ#,p 3zj ΈAu@|W3}Okע\F 0;$sF2oFV8&# kFfg tH”[$/MI,,3KKa+Ґ*Dr*_Y&m$ Vh+G[d0.>Iu e]L900ngLJ1H#R߇ #Jsbr8o3[agʲ>w(̫NFkM>VE!3Rjqec\ٞRos̼Y{6&0 CgNVm) !|8i ֿ.¨Rp'(xYd>uXm_ҍ)[{T *OfqDu@ONxap[^4eN/fGRq~ro{kRc:1XpPdc@Y'9Rz#hi}V?e1+X˿UD!1|_b*Ѩr۾ 樨Q_ g6TN:sׇ{SWEyT=AeBKQ%By45T7t, ̹ⴘ* ZeK6'3XX|dMB{JP$%W\/8/FqJT9z1^@e Ib0pXL%(XLb$^KzL6NN:KjaR%tEXtdate:create2022-03-16T11:51:47+00:00LD%tEXtdate:modify2022-03-16T11:51:47+00:00;tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cy.png000066400000000000000000000040351475545702100261340ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4eIDAThYlT箞m0`ؒ4"E@Q%Qo}%RӷjZU%QDZBi1,66f`ܙ,aQ,{}Y;BJ)?R EZP E _c$zQ;Ё"I֥#$ffpuF}' $%pSL=ķr'Yù١1NKş{bifH;X0*B, A̬%pk!D$N&Yggq4o u@3B䶏 H&59a+Bw<EJ Nlh]=%==vp/mgɫp-ݜ1ԂvR@+55h;qdd(9}; P]hb.e[PeH)_z̍{tZɒWCeyq^gp((s|ҍ۴mbس7)i(ʭKGpG{%,84o y&~ Ny+xDxlb;d^dcW;vN20qsknwz<-f|{e<3c|;IF9Fqyiǻ!cf)#?C(<ʟ7/hN|+|r$ƺqbx0Jj }k?f*DpլC/[ޞ"UPp!t=oH9u-FEVlJPݥPmʟ{7\ ilUT U<[Dtn}wMj ,yȡtRqNH{&$vҠt@1h 8iӇY oN|OB/H!=sX!6t (ĵOSn$QT歪[pRJ$v*p1}H;Yބ]LtG;Ծy_󎜃~)룰e9tx?ֿ@EYfn7H)88| -m4=Uxn0tOϞ;X4˗6߹?DpA:H)d艿21h[)o!=TWӤK\!BA(ZV槣oN"X0jpљ).s|cinnQg}.5iCv]7 ,J%Lpޓx<>*ʂ|enaf|iJ% .w}$3 -YN{!<rRr9EMx=\l*vm#vg8{4~J,+Nc*v|ͽg7m'P4g4}g5dʢ"u~n?KU>Buκ-T/_\wy((" ܈s/1tݠ'47k0⩮XӲmf\ c劵y\|4&" \DU5LmϿȍ3$4HuqBjp۟hoLSiH5\PRJ)CғZ }Y"E,B5^6 9R%tEXtdate:create2022-03-16T11:52:05+00:002W%tEXtdate:modify2022-03-16T11:52:05+00:00CXtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/cz.png000066400000000000000000000012571475545702100261400ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE^D}6aD}C|JhE~B|4`2aD}E~E-;m+B/505C{Z2X)/=n&?0=n&>R4],]bKGD+$ pHYs''iQtIME 4ElSIDATHǥU0EѠEA@H)2yWZ]tlE@ pď(/ H~Fd3"" '#9 #,- P"! pp`"Ɠ >0rDf?=@4ϗ]7 ,`;%tEXtdate:create2022-03-16T11:52:06+00:00F%tEXtdate:modify2022-03-16T11:52:06+00:00rBvtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/de.png000066400000000000000000000006221475545702100261070ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTEhOpbKGDH pHYs''iQtIME 4!n7IDAT8c`#  J1B*P!`(':!)oЂ%tEXtdate:create2022-03-16T11:52:31+00:00Hnç%tEXtdate:modify2022-03-16T11:52:31+00:0093{tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/dj.png000066400000000000000000000022141475545702100261130ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEdefj|id{ezhyooGGy..昺iiPPfgg]\33]c((@@WW ((qqrra` ))aaba**cb ccbb22H*dbKGDD pHYs''iQtIME 42kIDATHǥW[0@@mQ80ND [I IzsNVM`IJN1Dɚf 6IJJGsG`Ȑ\ P0"+[pPDnG"e;?/$ k m0%BE aQB`@e? mAeᬦ7QW;BP .&;VZiimktv"cD@Oo_ǀ( (ĤvGLMz_PN>ʪ]"Lpxt|ӟtCq"W75$to&j1RoJ`҇aVL꟞_C.^@`BHΩN?mf=4G%tEXtdate:create2022-03-16T11:52:07+00:001~%tEXtdate:modify2022-03-16T11:52:07+00:00lItEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/dk.png000066400000000000000000000006331475545702100261170ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE. *x'v*bKGDa pHYs''iQtIME 4ElSFIDAT8c`Fecc#`T(`ccSGAtfAJ z`@ U0{TW %tEXtdate:create2022-03-16T11:52:06+00:00F%tEXtdate:modify2022-03-16T11:52:06+00:00rBvtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/dm.png000066400000000000000000000044731475545702100261270ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4TIDATh_e盙;suۖ&ۭ-ۦ-JĐ*%&#/j ȋJPES CKњnjK_޽{w|] v!IL9sߜ9JQ$VaY>={gV}^=sӃFYHe\02` kp%nҰC^_b$HJ. %D¹sA*jF⋐ [@Pl _qqkBl!eY콹R=bƒy\pQS)]o`0%]8d"H <P_UB^f, 20 )A@-&-TtPPv,6@VDC.gj̩k\ b #2j Fѥ'ym)ɖ{`:A-"IRY^P*co*'Tv8%Mg i*.i2'3R G{r6T? S]OmRvk##.Qj泥 Tu÷4O게芾xrݔU/.UƎ.ϸFiw8Pt2sO:8Ht*>(, o!CȠb.~+fW$E3,qTc@' wƪDb YcCfȅАwIJhՂXUI|%-8]Q|`}>dڡ&J襾*5q{z{RQ5U&WF"wuత6̢XZ#~1bplXkXX 6XTtP:T~3[zڥ%S BR-z:Ik|_;">ΛYgU [-{ׇx ێ 6cvV,_i o7pYz#GUc,J9>O! '%c $U) C/zL5X2lNvԻƳ @X Eв4t 뼋4G>붦irA\@[1iPl343cC:zS|ِ/Af [R_Ri}u792EU&z#J<;?K2k>G=f,2Qn,_pxs/CȄM_#m~t `;[˜mRTf=BH[|HO?T歜r۞ VDxkbFMaxre 0Z}WwxI~w53 BCEC{,8p5e.Vr =gS: BQ;  d1#QrzSg&[D1k #m1\dy4$#)n!<C| jϑJe`Ȟ!rL %_SZ .+ w 7f*\0Ÿ#Z)ةW+ &S <*`?E<CMꘖ%WjG]^xʥ!7((K5Vi(؏7,$xB Xe@;|޾D#7E\cB'4O<6`e\02` k0̵1?%tEXtdate:create2022-03-16T11:52:07+00:001~%tEXtdate:modify2022-03-16T11:52:07+00:00lItEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/do.png000066400000000000000000000017421475545702100261250ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE10/A2?0)'+(*-&'ԑ젘쟗둦¦ͣ˷Ҕ͑ꡓIJʫRp柀k`·v{hʻv¦՛ئɉգȦճȤvƀdG9ϕUNs}xȅz\嵦qvaіҽٞٝ{~柆ڛwĖl;,:*DC&12 }>bKGDkfZ pHYs''iQtIME 4  IDATHc`Y'`cN.n(xxpQF 5` χ00IH` DX%$eXdq<@AQIYEUM|hhjiiX;8:9iGi@dTtLl\|Bb$gdfe3 '/(,**.)-+ *p*Ꚛwsfs À3q hkgĝG 5`ԀbQ]`%tEXtdate:create2022-03-16T11:52:09+00:00#%tEXtdate:modify2022-03-16T11:52:09+00:00S2tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/dz.png000066400000000000000000000021761475545702100261420ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEb3`1tKa1uKa3b2c2`3 Z12iH)Q3c;3)336,K;XXq錞(R3.334443 / . / 0@d{QB33439Wo脗똨떦}Ni=Z읬a;33443d81=gJ읫$3*Q3%3X3`3.333_<3qb;33qHֵC_Wp.3a3vLҡ8W\uk /Zs\33]=3邕 1D`Y333JE3Pj 135$ERl떥\3)33/3%3W338M['0_DD-<ڡm7!܏"P$^\( Lݭ"DfN()-0#P̃aB5A0#A8Yୋ(N|Մa▪ _9X"$Tp0xoЪe<;0)k=W G!2r̬Ed;QFx`Ša3lyԂZAġ=B6z+Lѻ; ukWGHvӐZׅbwBaν ^ ip~fk/6$~mT^pow:n.O'!b=KyZ.u\Xii%ۖJA܋e܆Lp%QW>D"خ[v9|[99)hpv !h~r+\ _i">vU@ Ǧob.By|H0i\?Q7 d,S]sx8w!A6S>i}bI_{]IEü#c,ϓ) SjҬOlrBCX4pt:">39ɤ/\y3Svh? $4>e٤k9+g0\t<D{3ЕMT6a/  .%oag%$οϲF,?sJ>pɶil*gO^nhmX&|~g"ٷ3% -P1*ȹeHqS%tP+{v0uLCթA1,x-oIȓ4ۂ!zy+tĮC㳭?d!z#cBFٷYSŠ,4M ј#d: WJ.itw.9:"l^驜!2AU;I1BqmVN7p.mDh[Hn,sÂt6iuPda4\#MNrT^{h`YݎaF(S; r#_iL |YǷqPÁq5feh] V /_ `,-~%0vf%YqB3abbAW]q8$+@ꑳ Kf1w4|a*c.-q%ȮӌJR,J&gZNvfl851̭1)ַGytix?[U{~D1E s0<{DsF&gۃҫ @*ѱndG9ri| K{=S0i}bwmϓы:C^3$فOsptTjk#b.GÐl';{nJgC3&|!m."PcOсGw_b1BAWG] N>EJ0vC/&io/3&mjBRQCupTdduHch M28pP7cǻRd% `miݝ!<⃣Mna-("8[B,8^g s'LV)=V!:Ta׍>d&# PQ2b\NҔ-BNtʧah]ouO^E?!:aQp'}6-$U zPT6Kh(|,i_Fyd˝<] s`U7N'hj.kVcϼUUȺu}[JB ARQ "2'y;ʹġ v^D#Z94H #Id@e RG+v!4jFYī}%,mڞ vK5OF(:&ْɣՀ|KdGD:W)2%/+<ćfszhx5GGku&'~/X?>W7;EWH^W`%tEXtdate:create2022-03-16T11:52:10+00:0009HP$6? !3<qwAIJ 8eX^!/_O\BBv>$!UT׀t-a| uF$eLCIC#1 q,45ήb~޾ N1 `O>`Xx*ٶGʊJ_%tEXtdate:create2022-03-16T11:53:51+00:00aá%tEXtdate:modify2022-03-16T11:53:51+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/er.png000066400000000000000000000062741475545702100261360ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4KNa IDAThݚYl\ynsf8p'%&%ZLZDmUNN-Цu[h6EPC@)<h6a;v븒EId[Fp> I"eR$w~s7T}ArıB1Qmx3:٨ΙN{ vH 4y{vx.%`GL$MN9~_6BHJǾޤkQtbǂOcDo;Lԛ8`, ٨Ng*YJ0!+!|CdjkqhG!FNYBh`w-N3H0b~L{*BR@S/ tџ湵8Snj!ɧwQLUȒ3'БןÈ~1J2uDrvbM P(D/[Fygzi^ܙ"hܑQL;6N'IoĿ5Fy$.]?a_ BJQȪ PHI~DVZGXGrg-TZiBB 4Aվ SG2T?Յ*em)SEzl1<(4J~ σ,( 7{0{@G{"O??!E,4>^"Y4$UZ?A6Jgf8?%Ps[WymFYĈ/?>Q@^Û-f4Z:L1#?46j~^{"&rQz3놀Bk'AX fI43b_I6 c5Q|Q½ Υ)}<ƪ &z !3YdE,b0=3'ޥkzYWzhJT~,%4yt+~OJDr_Piƍ05#`s\p *.:#8ya5F=:Gt !JU$?0i,F#Yʫ_,5XזE<}F;* QpNLhrCxy>DV4Aih=bL4Kwyhk{lo횽7$qyK@ᆪ)FY8@!LO1 D=lɹ)'3C9pu螢i̦yf[U2 [%Ah#bӠdv 󁔠xJ9@->&] _%S1"mrGG'J⤋D{ҹ5Am1/]d33 8$Z>~;PH4);X <IHտzf"@վf2 `Շ1/f Jbֆ5/f)|4E틋#[\IDQ:<<{%UW9@.6@~%^!z 3|1Ci8C8 Zdƙ*`5FJ(A@&>SC9po=iƾ;k-ke_k+AFtA˳1 f]H.xseF&!zDuڞ;@엶&-1Fsh>ah si&hv~+K|5V8b|!~h+f2D T|O!mte\A Z(d)|0!mOWr6dۇWq~-d=XEi(ΐ;>+yiK<^Dn&xom9[dƙȱ<\N2bS\c?dwGr\tW)]Ŋޛ$w>cȢSi5_rT-~~?}}u!w{)"wlMgCXMUD[F"& g2O f^9K!|[x%a77`) H&Xa0%lg"O,ONQ f` WMp-h4nYtLz,H\Vmpj3ntXܴTHC&pRE<AhwF܏/N+YܽY| 5NPxo*IT[6{- ׷QFy&fۊ"wHH\;ޞ>Tt > > > -S- 2!P㕾 a?h9` DСMO]wIm %O;QZPmhU "lkK"Ɛ {/3@IZ Zu(  cC;Xqi +h!z/ v٢|QT&|uOZl8',Ldkgm'/(Ic:¥őNGkzf;ʥ@!/YK*F' zQDs|i\X9etqvjgM+ 0gJ83ÇX2 2ݔdEP?޻3-7?:Hȹx$ѴXL{iγ=x/Dt$IVq/UpG`,w}vMg̓uXGpN8r\k`,^a9 gvY*@H*Y-u8U撉$얀+fc+\2~^~乫O<& #K<72Ck%y%K[Xr8c{ F@PGytv56)f0&*r s2(Hn#- 3.?)kؐZzeXBQ߷> BPkn]pY:EzDAb Xۡh_ *BJ $>c@J{|jwt3````uzV%tEXtdate:create2022-03-16T11:52:18+00:00Ӂ %tEXtdate:modify2022-03-16T11:52:18+00:009tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/fi.png000066400000000000000000000007361475545702100261230ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<f3+W1~ĈbKGD \ pHYs''iQtIME 4X7eIDATHI 0D2S4FXW$`[ުXwk` @@ 2ٞ@\R7RLRpxPzLEk' G`cg1%tEXtdate:create2022-03-16T11:52:22+00:00,٤%tEXtdate:modify2022-03-16T11:52:22+00:00qatEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/fj.png000066400000000000000000000071431475545702100261230ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4҇ -IDATh{xT{3I&d(Z@#JՃעQ@-}Tx@h[/xP@@̅\&d2}!$QO#d&{kG`ٕh,% Z@LIE?K֭ARR{ᚫ;y>{W#t-=z3R.#@̅h SXs8Fdj) m)x5S [R b^,h?=Cw,rs bo&}gV'\s٬[< sգY9u,^XKgB2Za-7sp2 nwSǓq,p)}Hy>yHGp G}C%kp.&:)Y/2Chs}8/F[8}D'eJNR1bD!+f]5{kX^fS0X|^vW0$OBŏn sw96Pteԝ[l|}Vs8rU"Ї&)ڗUk8%nR _)9 s<ۮp @m}.b߾jЎw ÌYmR,{}Esp>R6c]~w+ڂ=@65Xe1L|WM@Z<ȜL_N;Uuq( ?ӍM$()ѝ4Ԯȁ:NtwDM=:7q-q#h{4&K[&d۹l3\ofahs5]? D Aϩ{UP#'nExt[0oBtWP)9~^?J︔h%N&AS.^:͌ow\N5BۑcTŸ~F`fR)T H;%[<%qEHm`'_ B3Vo"as$o (0(b`y ŒtMkxU<}8']xxڥx=(h޶0CM]Ik/R_K|E/yxwm;Us$^O㫊;,\;wLGS5 5zCW4%Q>n,rr;)sϿGKKIF$͓:DR{2"?S'psq:qhrj[?_:/¸G` ɗ ˠ.GҵT-zq- 5ϼW)gN%%xxb 0NbB Ɯ?I٬' _ cKt%&KVKo8ghO}3!)4e\̀}Щ PuyP "`u(+VM#Т:JWiq05-`#_x s )sM?[~&2Wxt1"$x3+s{u[dr̼c"M*;}zRb-YC֮=,&=П*q/PCKJ^@N¯sHքk&ѳ㘵V<#CM4* (!Nx+XtU5T.XFʗ 巿b(L3 ]P;fy`xFϧf6C c5׬phb'(EصvK}1Bؔti |y&ɐN&41-G [bh?N'i32*Ǐg֖S*DJƨ1"-8W/*x+8od!y^hRp~sҭaXgF޳c%g?. -Srhe7KE}&#(Cu}6Sxrǽ1w8PZ;+HR)0t?e*V qsm%5Lyx=NF ۀ,!4uwQ=-A&B?Fygvi%h!+D.E+ ߡT"[dQii_sL)t]ß 4YBFF HRJ6 8L$ %R:f!Tr9/(`F4h3c+@r#ʡhK${ZXI)+h1Ij [9".{w@hдV: hЕsh@OWOQ =n w ʣhyb&|a2W,{lgoۇheb~#Si5 fӭM%[(_[5l;kJ19DIim7:> q{)t9T #cqd8=Zjo -ɧׅхC0tDgB@RRhkwDDrI*6:pYx.8R\c8.i0+ eظxxJ;9]j(XQс9b0\~jkkk0*TYDRj8\RR3YUL&qGTDI#aRҼ#Z|#%h*B E!Є(L)( 6bHR}z 8RX,bgՊ;d$I |I_y3&# Le_37WB{L/JUQmwF 4Tm]ZOѕ凉9? PJa;* E*E,LFS Bb3k48PkQ@J*^ٽ3dp4GZD[m= PS_3"FMd{êSJ:fAq^. o7p)y.Dx!jgGscuSv8:Eu@^ln˅ >R eZ0x8C2P<2|<[; ve|rmCoysM} k J$jT,́ԁZouR)RLY ׁH7u$il@g1~,'g%tEXtdate:create2022-03-16T11:52:21+00:009%tEXtdate:modify2022-03-16T11:52:21+00:00{tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/fk.png000066400000000000000000000102701475545702100261170ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4շIDAThytTUޚS2 a bEs@a=)qZj+6N4(iA”JeTx=B mjX^=}9W7󱕗Ox|FB`H&UU9\XϽ:Өx n0o? n&q?^EM%wz.`HoWPʍL3|5{YqϙTMj(""y1j\LCxyՂd`'g8a^}G(RUw+?qj@pgڢ&G:ͿTߟ> q ֒Bܣ*>u رK<מc$΅cxM/.f4/y,f%^əν 7ye՗tq*'-ڹ×u&xcK ۈu G1n\)3I$ܳF` z84C G״3xjOC3`^˭Sjذ,, iz tGK1 psG$?ˉAa:쨙!h{q<`CwSjmɝqtH,#r̪+`m#iVJ 44w Ôg}6tJRJ H!ܶߛk@ʣ9W$GF9N JuvU R l`Æo }Kt{^{}&J5[*hqFqv LGu)%:׳6H(@@yOy|_f>.!VzLz2r(ɴy!$stMU.I0%)]"`O@=& 2d3ފޟpdE6Ɩ <P\gv:LXqg0cn/b2[Ih) UU_}$=l=}+w$BRtVd7^={:睅43n4H\7vA(g:4eV8lr1r4cِR0͔b-yr{˂nd]=GQ,9Q“Gr}g2 ~=Dfl7?EU+A)|c<3% I*BAzz%a`XX,D:J yW1K!9gRy)nWRJ: ϒCaF?xk/,y >\sIk%"ZD"n7ph4J"p,A[Nj ob5sÜXK(HҾ}<=܊ uvK³iVޱo'ҬbɞTX ('MsgDhhLE;1$$qID!`H fEx98->_AKpMiMܬq/!hxO{$ǎdk4=}Lz`.Kc4H*BSlh)AJW[ M@%nqda<+ e','ey_X+xITtu?ƣ3)f&³Iw/a\sx_~."d5~F,k0fu;ӊl8TN,s`4_2dhQFJr wē xLj zOsOx2 q=z Nt@HCې N{%fJi{e51&}gަ3ɈP<~~ )J ICZ 7\L ->,ursشizj +#YE YWxЃn2q9BVFB ٤ގgr:~Cu0{6^墀PqCBQ%R<{dڙq#Ή>W;ǃb[9E31a6F:ȗ~Uͻ02[:D]>ۙ5QcW nW^'i;%ml?;^ǶuZnaq$k=4&"LDaT|xw `q=mr]$rrhh D2$cG䤙i4\NU`XH0ՒfW:N:w$4JQVG;frB,eJCY0%@QzUU(MGI$H;z!kL4-m!Rmpt6=Rd׆q"JMgƹXykWsCH4;Ơ+)⸜7b{;45ƺvY_9$`6x]Uh !uoS/aCE!Ԩno_P,][dzխ;cQǍnꢸ*G6oyt)d'$I6Bd/иU]LpPYFŧtk F8)Kήv[:95FB'f8(w k3g2!fbJa%M~v37PSkC| N.B4ocp\?'gaV,dສ<*8l,ԑJhf*|V5ثW2ҚC3> ڛ"qNiTRvR;Ƭq>(m:P)O5iٞC6J:RZ8Jgn'L(s!E7?}:m@Bv{OUz+6}r~> >ζ61Y 0xu3!|tqf\gxYjoNKR"i(hn޹+rKxT^ot򇍡pXU ',7õz")㜘,~K$e!LYPJV}}J/ť$Af~83b eU ٻ8j[n{TzRbnZ&}T Nggfڴm6N4X-o՟%ve`)K*Lg^pZzfadIF~ Sp8oR%tEXtdate:create2022-03-16T11:52:20+00:00"ȍ%tEXtdate:modify2022-03-16T11:52:20+00:00Sp1tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/fo.png000066400000000000000000000011521475545702100261220ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE>7v/Y'&((,G76Խߤڥڧz<7a$T988$S67w/Y7Jg,M-O-O*9'')3-NED&$((EF&&*9u/Z9bKGD-A= pHYs''iQtIME 4҇IDATHI0 @Q3e,%@]@,n~Rl Q%ڐ$ ژL_l^bJYAñ^ep++@"FX#yHqH);)~g H@hxA6a%tEXtdate:create2022-03-16T11:52:21+00:009%tEXtdate:modify2022-03-16T11:52:21+00:00{tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/fr.png000066400000000000000000000005771475545702100261370ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE&T%S'T'%&'bKGD ٥ pHYs''iQtIME 4/$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:52:23+00:00[%tEXtdate:modify2022-03-16T11:52:23+00:00bjtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ga.png000066400000000000000000000006161475545702100261110ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE64N{lmdbKGD ٥ pHYs''iQtIME 4?)3IDAT8c` J1B*J B 4` F !ؙ%tEXtdate:create2022-03-16T11:52:28+00:00\%tEXtdate:modify2022-03-16T11:52:28+00:00`>VtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gb.png000066400000000000000000000101641475545702100261110ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5/o~>IDAThwxU?ΤLڤ'$B  "M 򬀢j\ȃ4DUX"]aYAi0Hi&Ly a` Ǟ?s~=s"Wp oεRPTk˿e?aZdƊP>n?SFF\&gJJw!ϐ~hx>qѳAJ^2$5!6A,9!x"k>Tߗf?9dIC_`5M#vlZ5CAP,1Nl`<1};PifQuDn:eMOw4x 'S ;%Ef`(څ?rk.q u^}6/nU\/w֙lU|c$;Q1(n: ,$} }a)kGKGd`}=V5c/1oS(ɩ{ilC5A44?:[s _5P ~?CXc݅գ1잹PYxxWMՑ$$PUt#iBqwsP,1شz"c)-'oiI;o,ӯW{NȘ8i6B *>zoLFIpaRr^SAQ=e|{VC6~asY`2[޷3AE&iUdI*1>)cvJjs~|,\{Dyy#8i@o+FKLd_$ IҏVԣHbOyU ݐ(w$EU):n}:#9uB}V4{@i3d;n<@ ɜ"yw[6d ̡cf@6疡ԜKS,e"Qu ʴQ-)3Y0YX0c #(\oaj}mhb.#ESު)Wb7TTC$ UfYt #]x! OaHJMN! JDX'pvݵ5Ud[IAX(=`Xew6cdf0w%65ӽσ4{%R"3<*sAsu_oܭPx̩s'i8;LsB!3o#TLvw. L'A]g|"QZL_[6%d kE%`TvhWXPkh}wPsi9Pg2SPXvZ [Mv^GYU=27GaKn-X+BTkDX?v-ޜAlU_$Ȟ=icw 7B|/$[?tNa gG:Țj;p 'd8DzY-o/D&*HFՑ$ZsP4]ېSLN^iCF6^* VË>J0̔|>ls>]h?3O Km fWv9 .cwR!{#*~b2[9důˀkҀ bጧ??~/.%}W:Z-/ UAmF6Aݢ7-B|L冫pC[v0g'ǘm8ʅYK(/~4H'Z\y_2|p7o3dc-JL` P!5oH4INHiiԎDwmͲ׆Ы[B`HJ!w*gr!30z(rJ}c#?HAU"#8Ě {INcٜ!th0k}?N[@LJĘE܉ { :D4#v?ٝfƸǙ:7-8(ULlEej=[,ktW}+wy !$+}x>cޘ:჻LSj}I\#[=v%"x> a8Bc?u_B|ZAr1Q7Zq ~1OITyY?MVk_"[中$1wt7)K >RZP˥1:K72g|?4/p9 Py𸭹x-K݉W)ߔ"(25F}Sg/l`n'!3_Hr|4d*%l&:>ѳLCsyKZ goYxu=?; 7%9Nj7ͮ$W,٫?\A/IѨ%tEXtdate:create2022-03-16T11:53:47+00:00ι%tEXtdate:modify2022-03-16T11:53:47+00:00,tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gd.png000066400000000000000000000062061475545702100261150ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4#h PIDATh͚}l\W;gS;vI;iGK6BjWZu[ĒCHB) -J"TH*m vIih8 :;=={yΌaOg=}uiZg`ܸ 7䮚1HӪQƌU.y&| JgJa4D9D91,aDAJcVb:ل:m.sc-$&t!r&t %uGꔕǍ&AY߬I#Ҙjl PhED;\tF`!nPfsD)LDNV;\.xmO- PAn$s+&nR,ǸE/zٸ3k$ٸI撅d&NV9r/W(Sȍ ?l`8$)'@ '~qu])e0y?J-KZv!۸H(AUn\"d"s"4瀺яe` 6Fy|shjknkv\%d, 7۸2W,|IP)axOk1;2Ar-&%C?ɿ_i% LU>bWYmFJ4x 6FѢUS"Vog]iN0*Ҹn{xq?kSM|a]4ZnQ7`0Uo፤]}d @ȸ&?lt/ ЦI|[EJIl$ϕ+7os;WԒW8!<{'GC_|OնL0y;xc:ʱ>5QC!(cvqj:h>\u- Ey<ٷMUQX r=D~UB6kY?O&F q3&s'}.OM}WSQoyMz34, PU$“5ӟ MWPeA_6D39Zj9m|BW"krUTOi"t.o|2EJ5e<~f'oLEyK GrZ8s~`2m<ւ&+"owFh(vH ^\CxT=_uIڻݙ1 s?siX[@D61ņ,qg9=&"3$'ز?C}3yϦqSM'l'8!CU@P6NJ8cI>w>CT53L)r41|4>Þ2X8ce:yˠC J+Ɵ b 9oML(HI8ݤ"L(4niaU0`*0G)_[IVZ`ip9Z9="%<@Y!:\ְPt kr;ʯ4s /D"`‡lgOu !0Z{SXk+# g/v0p/= #!&dYEa"R֯\|3^A{mF!~}iΎUܮ1#h ;)Qea+Nd$W- ؟E~m|bMN*H;L9o(^z뇖/:0w"hwkӰEYBv q9Sgߓ1/ ]VV 8s+|reЂ瀀~('HeJx ^qs@/ ps89V$j$`)~q>m6gQ/WRwpC nj @Q۷.ɗ{)ezS}>WÆ,^}CȖ15m`$A+1M;cm^Av<~gu2P^E Û'xg=)4~;G m:ݱ$_g#-t= "Pv Q¾qUe%xK3y~pO17oc$U:,%|xO@,qng3 +m$:n@+2y3⥱v5|^ڮXԧsUD)a6c\+2P%!mtN1V 뱕: sW@KRons754VX}8΂8)r 3">mM1zc؇i3ȍ܈Yƛ~V XMB w kƟ ThZ.ҐƟ:#T9`L<_G.^5U^N[$~G\/3IYgލX赘E/,Ǥ,f~Ii)5'u( T~f0/u `FXQauh̐WNW*"LjkJ :Q%1fP[cVLp""Z#83y^;%tEXtdate:create2022-03-16T11:52:35+00:00!%tEXtdate:modify2022-03-16T11:52:35+00:00|_tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ge.png000066400000000000000000000015021475545702100261100ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE??yySS..ppFFPPqq>>))ssWWvvwwUU((||QQ**HH//``aaEErrYY22MM==LLII++VVzz2wbKGD;9l pHYs''iQtIME 4V^QIDATH[o@WXvBY z>Hvm'229T-2Z]#4?Vt&ݱ;hz K[0L`O% ?B$?ߖ0>V)7c {B741|/ _%,9,ųGd+XPaʼn\,KoR̄ pAlkmla: P9[ * ioOL 줱x1vT541( -hk{2DaxЍ8CY Y1kƋD'z%tEXtdate:create2022-03-16T11:52:30+00:00%tEXtdate:modify2022-03-16T11:52:30+00:00DptEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gf.png000066400000000000000000000005771475545702100261240ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE&T%S'T'%&'bKGD ٥ pHYs''iQtIME 4c0$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:52:24+00:00%tEXtdate:modify2022-03-16T11:52:24+00:00T"tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gg.png000066400000000000000000000012551475545702100261170ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<rPLTE+,---+**)*+8(K&L& -h#W$X$cu, -V%i#Y$W%DbKGD% pHYs''iQtIME 4% !IDATH geIiSS].7̏&` } p3cٲfCAc :mŕ?5T6L Dtfdl c*bXևb, vm)x|xD @ H < %tEXtdate:create2022-03-16T11:52:32+00:00y:%tEXtdate:modify2022-03-16T11:52:32+00:00atEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gi.png000066400000000000000000000044141475545702100261210ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4 aCIDAThklSK.6vn%1 !AZmv] 6iBڎN6MLZMڄ:*b&UĥPVm ݍuI%/g|8ڦmt$sysâ+@TZJ\ Y@SSszF~y?@Z?].lZ0Dd, a4毹u(痵Rw C;_7PC4lzMS5 0MRx<GUNFNeg7 zn7 #2\跱0Itto1gO 8-_ 7{藾pL >M+7}::A;j|(RxhܱK>B_)ꮎ6LΟ;Gյxgv1[͘0xTjBjoIiEIiB֯#յ/͘-`p՝,{f^(cmOlmhдG  01H"B0Gi]4EYڱiuwXS&7kEhгYEQmgPL%%ľ3ZpQ|7M[_R<@ d؂z΢o{deYE㷢Mc/ЂGiba1CGGr cw2,P6֜1֜DǘT6g#> ѻ%#W;CG1^b|tap.Ah+ `H zLd|ttБcxUzD2sBug05 `=E4…U/sBm@^9>駫P,FĢI;0:T qcw3w4HEoBh@+" W3Uyřu~("tMhTjh|Y f[p}0 dxT>١TRP@7&Of'iO'y$K9@8Iv\c$Ӥ,?></% m=EA؇y,b,qJJ€2+՝@wx @6B((#C)q YӢJ,:A(1H#иlnDŪvWBx,T}X^1}5 DE0u4D: gYNȋ?5Lft ͐0/ tBXPf5Ma!FTzbU6|Ty_&q(ٴ@*@)3Ki!c%5y@H/{O@kLa!J r#R&|!@.' #F?Vz*BRDa¯d Qj)35dyxr !i_-MF]SPg'Jjp v>f#"dMpJ L?ces|hja)mDܺI\Zkѿ WHyY\_VFZĠ0`U=(jUEˤ.y_,e{=^B=#T- \AEmFuPfi.n+)+ Lވz3œr@aԨЩ<#tQRoO%6~gpHqWI)POz7; &7\I( d5d6CM0Yu HYK`bAB]YG4BcBLUԾ^; , ² _.V0BʤB)P^!7.%tEXtdate:create2022-03-16T11:52:32+00:00y:%tEXtdate:modify2022-03-16T11:52:32+00:00atEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gl.png000066400000000000000000000017521475545702100261260ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEnIf4T+MHen)K 4/0 0 1/(Km|C 1 2 3FcEc/Q/P{mHf2SA_'J=\B:뛫f~e~.O뜬@^鎠#F>]읬@_뜫 D&P[bKGDT pHYs''iQtIME 4"yo"IDATHR@P)l6B@+)".-ۖ(8.<]sq09_? 5]pEc6x" ud"nvN !@w8{a`^Z<7{  $,X@ Sn| QHF "BR ^YyE9%}1B]f3rZ)K(j 5q!>Cߩiy -11@vGtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gp.png000066400000000000000000000005771475545702100261360ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE&T%S'T'%&'bKGD ٥ pHYs''iQtIME 4#h$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:52:35+00:00!%tEXtdate:modify2022-03-16T11:52:35+00:00|_tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gq.png000066400000000000000000000027361475545702100261360ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE&M=>w/1=r{7rrz<=st$Ssw/0r|<|PUUtʂqۢךӋՑ֕ܨcҌZ @M3g͞3w -^BT,.]"|U׬]~9Q*a(`۶Rx vڽg/طx>B:'N`pd 8j(ΐb5@A $@P`P \ @\DA |3R6%tEXtdate:create2022-03-16T11:52:13+00:00%tEXtdate:modify2022-03-16T11:52:13+00:00mOtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gr.png000066400000000000000000000013701475545702100261300ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE[XZnYZ\;YUZlVYWɔntҤ[Zol9mlbZmY[Xʓ\^\NbKGD6G pHYs''iQtIME 4!fs8IDATHՖn@ ֮E^h]{_Mx6dI~&f'CĨ~LhЁpt6zn.7CwA =Aq@%2~ҝ $I`0 (`f# ) @%6-}}; AZ(K`i*@[|k"AQ'B"~Ȋ) P+2 j>@6R}P9HT_'A%tEXtdate:create2022-03-16T11:52:33+00:00Ҏ%tEXtdate:modify2022-03-16T11:52:33+00:00j2tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gs.png000066400000000000000000000114611475545702100261330ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5OoDIDAThyx?}l# .+jE^JպV[MUbkUkVA e263}}Gi+}y|6>DUFE|m"NYfBǩ*d {w8?w)җ,罸J" 14z0_(BjG sm{:Akڰ"*X8lo𐈧0uvk8N;NO/}B8w#R~Oq]{) yd!@,%BʒLi̬bJ4ͪݱƶ.?SX@ULDMM?H, s0tG@QCFQٙyyTǩ ([_`㖽*1yz)qE8{1ihnkff2Edvտhj81XtDr; ẗ́~^}V݆0>6w~_W$ʑ#1JG4?!z>#TUUE2ϷGP e=}/U$X`IL1D2ɑůJV̴<7s\>ψe5)OSp7i? QU, Ks}x2>UX~g\R4ت𾻔[NCE{qh8`!1c3ئ Tj lRx#+C<= (L2 Ų #8G!6G]Fq㬬^}.'1V #N%4f4I34H**9TUq:TWې);HOʞЛeT*_>OBW3ΨfҤbY|vC|N3焐J QdF:3J0 Yx Uڰ4ؿYb`-;y-\sQe(<%O"$!h A xFL)gɒZV#ӧۃّF.tc2g ;łe̙Ss'M>$BPNɨx1{/FG44̧ Uanvt&uDt׏ .rC?(4v c %HsYӹ,/@Ii 7Kk/zqFR`7%`(-F_cMM !kPU^dSrZ:0ihD<A,6 @08 d98E"'ݺ;WM~Tw׏c*x!b}{ːHNS/|"'cp~"@ko~9g7Ec` 6ht*Z]tz (ewQZڃ%C$V=Kꡑ/0L`K$҈udkc+gD{YO6.h>NϨAe$~yoTW2܅j&d bFӯ<$mmQ&<7)Sd13TT,qM1*_裥EUP\m%]AcdR~rՋ(-AI$}y zP˟>{_Cn' -i#x~|.]8Y 1VsգxV@:1FS0CD5nLoA# &d֭kKObW}'MqX mռV+&G Y/@IuyIzyj?y?&@>2$d Ϗk_z7wX̘R=t晓>[j%Kya3>jV`mIe Ff2X[ymxcr/ąݴz4B9rj$"D`yt.^L틛Y~D҈ڝ`8V $x2cF̪˱̨SO2ɀn96 FRB0P;H4e H'6P&rjgs\9Q`C#/{Yҽ~\]{SXr mm=0tn VwI'H/FP$҉,d@ >òOqNJ9)HeUhO}gTOe.t:\ ~zຓ)e_I֨DIiӊT:{R9 w۾ qü@jVtIGSK?B<v'|R2I?x~aAG^CA`MAHDYʌry-GyDm }=ƿļ MX4tﺍ/3&sOͭn*:ݭC @Kk-$w?^;l6s6 d<7~ƍ*-d#M4ֹߡrstơ?\I?5roQ3k,u/`<@b] IHj/}hǙ&<)W#Kʂ1ǟc)` i(|"h2LERIlf3L,dZo,6(2IX,! oeLI¢$^w;X_2y4V3J$-ׯ@D:.\Oh*]baX(FQL#;Bzj:}gnv$"I*i#/ D_ڤOm $q!U6bo"4 }n:i~/9RdXGk:::HU 6v8a5^u!F{2uĚ2̮ 'I`AaRYC*@Dv .BZ:tLțg"A('U.cљؼi0=S ԣׇE}D"IΒM'ɤ4POoc{OUllbч.f1H Ѩ U;1d2% XH i YLz-dݱn ܆tX\=\&Tat;Rv'EQl@SSA'\$ᘞgZIA')Ȓ !he8"4= ؐ˦өТVK8aC/ j8\1Ũᰄ_؏N׊՘UK*g'0*Bf:mmQr,Noma˞R@ cT&Kژၛ y<&K+i `DI)*(4v4;`g|~̂>־bcOaWLOEgs߿l%bbI2W/ ;[::35Q]'8}V?,Q#YݼT`?^ 0=~?{8zifo.THI0b@/3oRfRު]sGDwc+-il"LMM??[9xi$:FXۃ׭PV8@{7l+w 1JcǹyFgӶ|J%!s71Jk=6NOcgIb&4Q ^pX  AJ62s<@ia.+ӫa=C0aRȍ1Ou5eW ̾?IBE]d0c$?l_~?{H0G Ρ>1N+2= Ի%tEXtdate:create2022-03-16T11:53:30+00:00ۣ-%tEXtdate:modify2022-03-16T11:53:30+00:00ptEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gt.png000066400000000000000000000020441475545702100261310ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEIHJоŤͮjFɣ֟ЈϺƫЊwūԼտrƭǪ~gސݏ倚hǮw]ސ؇܎ܳͭ灙iʱuה؍Ԉ֎ϱݒ~éҼ{c֪{cɱy۲ɨδx_BunIq|a뜕{}d~eɒpI~]ȭɺƯæbKGD赓 pHYs''iQtIME 4% !IDATHc`L,X3#q`ԀQF 5VV6vM\,,<,| ($,"*&.!.%-#Kr J*jZdǢo`hdlbjfnAV,6vN.Ea,Q1q {!)9%5-=#3+;'7/@,(,*.a)-+!'!7445;:{z'LDeL6}Y琛'e7w0j2A*0@%tEXtdate:create2022-03-16T11:52:36+00:00)%tEXtdate:modify2022-03-16T11:52:36+00:00EtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gu.png000066400000000000000000000056771475545702100261510ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4$ IDATh[p\WVӧjղԺrdűknjgl@`L%UP3L1$R/SRyCXX>C7zyl?Vun΀-wJ㋟zi9#!8yiyY-[lVsH'Osp2NPNC5xkN]9KwfA=} k% $ɯ*|x؍웝@#.gf';;qSXs`LfK\NpmcsK8O̊";X/<yڳ:.k hopц뿀I'O/0q{(;צdzcxKO^\w1䥙S`kg'Ȯb~ɕ22Ln˰Xa +T ;q2,7":UJŦMcn/F ,1fg@)DAnv#W`HDjAa@4jxW3Btj`HT9j(i 6 0,*Z6T>P^/8MA "mDN=(Uc!)T7r-h #k5d(1Qw!nur(OItm/4pBDz6n꣺s?\F#BVѠEi:M?vUsЩLR۰=ʵBH< )qloDXQ)9:UCѲ^hzda@/wp+W $B!L$(Ͳ0rZSqjNUY`(xM/7B;L%{c]i|]# Ɩ7 *OGZ [Ͳ;:o*əYu4ٚ ?L:J+莶zB3F Am?YJI#1~a!^VYjh@s(Y6sLu6\c}&W,bpA|0^3Dxl*&3m:w:0:=4 D۷ik㷠\"p/>D&iⷪ$RW^t;-\Y%X%{0{ gaP,ѹ,J`ݽ[f>5#āC ԅh|s?cߤHxt$Wz2WQjO{ٌiB LeͷD׻wsexh/}5lObhF;Yc`fh ϓҁSQ׺Ǯm?̾x= s0e5DiYO-/mmRf//1F̝`:xwaFz_a׎b4,1UB5lr_O1;6%'N "] SRr~q3Imb0{`y5 Ii.oFrÏ3zܽ`yo883_y_{~J׳~ IV7f9Ms:,R+6gfq7&ޘ}'ܞA 'D@*j8?=Ӝp?Da|PXcei'NlψL ŏCTF.>z֮z/xGdmFh iQf:xpk{vSxeHhL܉NtGG6:J]qH y}9A ^SBл6wD[o Ko״'m[c7 Kmyll;z:%tEXtdate:create2022-03-16T11:52:36+00:00)%tEXtdate:modify2022-03-16T11:52:36+00:00EtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gw.png000066400000000000000000000014571475545702100261430ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE&&($&%& g$0  &&n &!s ikj$$~ $ ; ; '$۴#cb%")3?CB !*EIIv DI%> q r .   W"X!%6bKGD{l pHYs''iQtIME 4&~IDATHR1(J5PPqDx!UVy7WCN_rv 1 @_:'Td2@*N@ 02YlFln](" YR)D 7-Tkިz-4[dmϫuA|$! =`8`8_F 6FL,o#ɄS0ٔ(p+Kwjk+*aQpq{;;v^lԀ1 /N -|5%tEXtdate:create2022-03-16T11:52:38+00:00t%tEXtdate:modify2022-03-16T11:52:38+00:00>tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/gy.png000066400000000000000000000064011475545702100261370ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4'  IDAThݙ}p}?ϳ{;z fx7oCyI:v4'v2IiIZ{qiN&'186M dc̋ LNnwowwdInvt}~<+?Wkµ3\Mh@~hF9ksY9i\!` R?qTc}څY2m bVa=?3nqyP ˞䉪4lx>RJ^A܇L/Kv,Ѹ긴⼻o/ѫ,}2jWz OT<äУ$SqbF1 жwL$r}N&,ܙU0t sxYVlevrbF5VڶU`I@үqthDq +>fjnF:(ndY&Wg#UXIыi'ŃAm(B `_cQ@ӔK[ރ):`"U̝̟fA+ cT, *Eu[]tM`O7:fHRxp) YQ:צHt\$:!)x?%< \n#}cBn5uOTEb =9>)ѨKN$piDpX鏲u] 09ֳf3Ӌ"^;vm+̽ ޹֯x@c.u5juvz@|nJ&stj|&9EAIqZ jCzPqHěh2~ 克i\ϊ T6QNUL k,h\pi=RW-6Ǒ V0x^aA014hU<(dgJ@:9钆n`Z&eQ0 FF HCb7$~ P_iϰzAU՛X2)C$R̾Q:59!xc'mK&`w!YHa_D)8GT>owd (Ѕr,I'mZN>-()9ɟQEe"E0E@c:&T`:IbF/c =pwk6mwx8JP9Mo?ȪHz^!#dޔ4lfnYA_G܊ݲ38'Y \^qRR 5C #rkUGL-OC:VTgZtl7Nًq@VL ($Arσ:>8w*>[^q!11YTMK7z0PJ!%.0Y, ñS.E$.ͼ&}߫$\L~5p}?mZpz^ &mr i#9&oc9I!Ȕ&mW ^x$~mX#c*J\Aρ z|u |%^˾NNv&H =nx{Er´y1}áJu?6Bp%B`hE n ..å0k!DʼST7)~1hn΂9қ:l?vׁc6qfwٞ ZW|M>1Ȯ_L-jΔRqd/y[!buN>jg W9H1q]ݶk}M=_/S7e{fVg{vvf $ ?2m^6US/o%.? vVW)z8zi/-᝜>D4y}Q=&;]KBk/XZn.r<}B=W~к?ߡ?nkh@ޓzY$.Qvw'AZ>m@|s]=]WlD g"oLpzlk!w=6. ?Q:'.%:ǺsmvOdt2lॿՍ|C.@c׀66ss7`h ޛ6/Gt. ^K$"k5:<~̈́/=~A˅ru`| m\d/L~5غNTf-nPe;ѫܧ@+%n uN>ch}q @v_u\,|A?޷t ӒGN:38ҹC78{8q+vO m2KR$IaSZ?K?FpjYtעdQ#‰oӆµ˿7CfD#I)yuW_Y\"ʗvu 08vEG 11B`(L5jU%dtLRsƕe ^hW:C5Mz3 *;~JJk gOٜ>+ &b$Mq_5( gd.wpo mTL'x6솯 rK&9y}_`h9Dmue^4ή35=h#Yf'oc6Y= *}tr-lt?`x%tEXtdate:create2022-03-16T11:52:39+00:00{%tEXtdate:modify2022-03-16T11:52:39+00:00 5|tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/hk.png000066400000000000000000000027021475545702100261220ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<7PLTE YY說zz㛛ccᑑ楥FF11堠鯯謬[[]]00,,!!CCGG77UU44HHAAhh//㚚▖..ll겲??NN ᒒ穩 22**븸66MM╕秧ᐐ㙙캺XX??##ކee椤uu99}}aajjJJ))77yy└tt걱IIrr ~~&&FF ``䞞VV칹ޅooff◗KK䛛곳諫QQ@@DD݂dd||WW݃55$$;ePbKGDJ pHYs''iQtIME 4) NIDATHUWq na&cuĢM BE̙2D%SLI[43ʬJlw-kx7w}FGɈi8s ԄM%a/7a>Zv:Eqq5=54Ǐ{+Ks1VJ?gч?4I2xp(Xvj"ޅG)1MÇΟRM3y8;CGW yi>22y SY\2sI\ƃKf1hD?N *>?L<&3?M4#tIVL(W|Ǎ"0Ŏé|Dzev w 94u7W1ᑧcq^΢cX54>"y,v0|^Bіc4agS~+5 ]o Q԰aQ^{oUfx΀iFoFZ fyxX-|% |"{Py'[`:!)XG:"ֽLEh|((׏a201Ex?b:˓ҿ<7؇H,CEn2]Lvv ~ HƎ@J3dtfJtน2رsl6]Tٵ ,Ù3ߣ1' سE L;"vE+t!%txf_ʊHIyG)Y?_j׭,?.kŔRSE\nIP>9#h.|a4]Kbϝ h4JkwJbSDD^X[j#^}CM|-, ׿/c9B^^M +W~@AA%Q<W`EͿcQJB`=!܆zOV!PjuZ7KNw^0'!kN~v>i`dAs E/>dY^yU8À7TgJ-VG @nWJk&MnҿЗ}@=>8(G  5?7)%tEXtdate:create2022-03-16T11:52:41+00:00Bʾ%tEXtdate:modify2022-03-16T11:52:41+00:003rtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/hr.png000066400000000000000000000037731475545702100261420ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4SIDATh]P}CWʢb; Q4$ŘI:ɍStL;^8uڌEu:L:M:fZMim""A.A7d&H9I߽y޳9B3 #2y2M Ә 29@1))s9ܭkYo+wRLRMʦeǷqƨ:{{vq Q&iY1{bE򧂼sW <u3dVqY?9Qv5YWUs{ I8LRa'9zݭ < :%edI<1N4ͺlO8U}cy4,^PvVEV E1Db`%Krp+--kr8YIyL6K) y -4 &-'Ʌ>q/ ͌yFXF}<樟nX$c1ֆYa;g›EYH `p 腿T ])J6{qJ&zn1 6(N#~(сBj?'p2k62P =|cRe#L.2xMK'1/Y`!ܞ$1 ; M$rE~;n:0@ }24xz~qEI֌qo)*;Z(qqL[ 2-bXVYwкoR:xRO}B|?mW~'|-N߆;8XZn1HRiFM ޼o iƍRk9wM]=hR3}aUQBǣ|ǡK!-?_Ae%Q@2J?76Jij_;R67mj 4M)ҶpXʮOA x0 $Hot1Cm+?N}ЖJ)W::azU=/_j6?jiZZOzж>44x\F}@e姤M,Xj-,R 'G\ A<7))[-,͇(FQ+Ò0 uCzO ,ɥqҨ0,Czg.0G0G%>y2M Ә 2y2M Ә 2;/o%tEXtdate:create2022-03-16T11:52:01+00:00D%tEXtdate:modify2022-03-16T11:52:01+00:00|tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ht.png000066400000000000000000000023111475545702100261270ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<4PLTE 1#?#>$?&A!= <㏝|+s98t76n2,t:~NY^`!OZ]S_YĵuÓȠwŵ΁d6Dx6M}uΫPаZv5L}7Dyf@?EGy>9:e:(āĀ9*89fFGy3 1땤7KvDPg\UVA*`!^#4nDDBQh8Kv43灓ɢQy![a>\:Yy"S炔32䌚фwf};ji }{)_S$O"|{)lj g~<}劔34Y@O-0t&O8fWTRGt-?i+@k,Hu.RPhYW@3z/J+\C4g@$!dURdaK|JOxLZ{Ua\e`^ZLuI@vA\ZSRcg@%210..1/./37bKGDԶwL pHYs''iQtIME 4(˜XIDATHc`` 01`ea&Q?#7//0//7#i&03KHJI"d 'JjZ:zj$``(jdlbjfnafiem#jhK-v`gkoC!v#C!C,v/-C!CV_PXT\RZV^QYU_S]%.[Z[;:{zI4IL6}Y̝7$,\xeW\zu7,'ɀ6oٺemoٱsFqkEDQF 5`D(5%tEXtdate:create2022-03-16T11:52:40+00:00 %tEXtdate:modify2022-03-16T11:52:40+00:00ytEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/hu.png000066400000000000000000000006361475545702100261400ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<$PLTE6453L0O68S bKGD  pHYs''iQtIME 4*w=IDAT8c`  %`T .C(F*J a&U0X]5}%tEXtdate:create2022-03-16T11:52:42+00:00sC#%tEXtdate:modify2022-03-16T11:52:42+00:00htEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/id.png000066400000000000000000000005631475545702100261170ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE- N3bKGDo pHYs''iQtIME 4,$IDAT8c``AA`0&\Q A!O+%tEXtdate:create2022-03-16T11:52:44+00:00%tEXtdate:modify2022-03-16T11:52:44+00:00a]tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ie.png000066400000000000000000000005771475545702100261250ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTEIHJ۾ϥyxyԆqbKGD ٥ pHYs''iQtIME 4-?$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:52:45+00:00%tEXtdate:modify2022-03-16T11:52:45+00:00ǹVtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/il.png000066400000000000000000000022501475545702100261220ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE::Ͽ((NNkk33խ""ҝ11JJ;;''ssww))((** ##%%yyMM۶bb߽22թ,,!!$$ӥ ΁//ՆBB77֞44<<GGڜiiRRpp\\ޟ##ҳVV݊DD++33??llᐐ ͧ ΑUU aa HHڰddrrjj))Ӛδvv'>bKGD6 pHYs''iQtIME 4.pnIDATHc` & 3`@qPX)R ;eɌ"<|nqv I)5J+(*)(kkjji`4 Nwstrvrquu2&> ~<`vy gPpI(:ڊAجvrnZ$cdTDt +@~D[0)9%tj'g%2Yl\+9CE%ePn]P) ƪH:ۊ7xG665ګ8Iȑ_0V]_SݟG_O$]QZkݯNBf( V%'M6"_?E8LH?4 &y) j40 ) 3(A Sfh%tEXtdate:create2022-03-16T11:52:46+00:00 0%tEXtdate:modify2022-03-16T11:52:46+00:00QLtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/im.png000066400000000000000000000050341475545702100261260ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4.pnIDAThkl[>qv'%Nq.-o*[/Zѥ0u4 Vuôm4 VB[!@+bb`PH MiCMsqlDZ[cs!umHqHd>>s9146FbPl|#@ (6&W%-d EEgܪ $(@0Ġx24R1@Dh^B?Cee )B^[@gj˹n6~A~Ø~0m+B3KwkPVjʹz(r+ER͔كfKK CÄ}$RkY[mD++) P" u{@"ɚd+(71a;iGRL%qq]#H2ɲux (5ދt؜+%*Ts`irfj^矧<2I"#⟱- 6=$ZZ#XXo/S,==P;vp88Nt {s,K&o`9"IzmN'NP;92KY4rjKb2h6EVl74#G"ZdYF$z= ף@ [R != sf#cXD0* e׈xB!I v<ɄnGId(@L2Q}2rx:e}QM4J2AEx4hoX}D]˶mᠦܶ@/ vM+=GEOF;smJ771p:(@ʕsabt#ٹq HnH8>ډ(s ?W{L]]) idF `x2Iү9ˑOݻت* KpI* z0>N @Ј[Ss4fE :r֡*^d2&^rBAłbAUUdYlt,6߼w? r@Cl9p z$F$)͹KqRVEѠ ذu7w}2o/ F[Zh}At ~dr&7n>WiHQz}μKbA^MUJKl6j\kINDy[!ߺ;?ɐNtܼ#T^|z Zʭ0S^{$LND*#p!5az{H5)8 1bZTȈȚ+I\\[l,J hȜ_aR2Bq è'N`I w!X,PHW_dj] TqlQE  - N(ٵU+WF67pHяI887lRVFO?\{ 0)L5,7,Z/yj\`0YrF::Ҋ&bf:{ڵ^q>.QR6.'2NV+O>{wIO&\Խ>؈fEoXߔ`c_mAsgyZFϸ˅=kGiq<`6ҀfeS }!4X4,1X'7jQ %@˱6D [B.j5( 7̒وt(%)"i,yT5nHAp_jFbPl|[k8d%tEXtdate:create2022-03-16T11:52:46+00:00 0%tEXtdate:modify2022-03-16T11:52:46+00:00QLtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/in.png000066400000000000000000000013201475545702100261210ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE31KߙKK\\tt~~RRSS滻힞ߖ}}¹^^lldduu~~eeϟѻ.$!bKGD?>c0u pHYs''iQtIME 4+&IDATH0E V XU'p?D]&Yߜ{ şP@7ƍ2v4Z O`q]ۖ:v^NHp("LhiS#d:c|'l65d]{ ODƘPF萐uLy,8et>_+[YU$((/h-%tEXtdate:create2022-03-16T11:52:43+00:004ۗ%tEXtdate:modify2022-03-16T11:52:43+00:00ic+tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/io.png000066400000000000000000000177221475545702100261370ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3AIDAThޭwtT?w̤Lz2L ^C/J ( {A=?APAQ屣"b:H%4{O&~$C"}w{Yɺsg{#/~ED,_!4@V!B|9 9CޒWB8TbzĻ֑_$ P|f@ي(& /!t}H5̿>JM͝w㥗fd׮ <60bW^ɴi;wq8M+.nDgA Qz.T` $I^<4o ee4>r1п/_t#JrN^ `tN&k>FCs&;nZ~֭;llQٳS9z4KEW$#pstӷoy嫯l>|!i4xOd`ƏLkE(@Qs޻g!۾櫟; ;!fxb FƍYv/f۠ؿ?f3>xz(Gsx˫WJ9z4K* ,K ˗@/~03KӺ͔lzD{ xa6}y6["$̟<+'Chihjcw'ؽ/]21DFlRV; h4!DMM o[OVҥ2Ze,cZ{gBp7dea2Y^ԭa9E˄ $Ƈrj9fw_"SBL*HժMv9!G2x};_o?ɁbWo&,K̝;5kpCpsrZ-V? A\PJ~~ mmYzKNwPJJil46&] ]$dϐJI+jdIL ~?BE3qToƌHî^7ۨz'ޣJ&Ʈ},}{]CXastd`X6m#7YŋD0>=[ 𦼸panmqqߛoCee yyt5] 8n`RNžKݎ @DR4F%r{/ OI>G+.^=6Vܴ~ P_^}z 8vdY{F{ veE0aB"POvsYD|Ecܸΰwذ9l3}Z?(*jZh=+V܊:Wˈ"px7+Oxi)\$/ÆΝJ7?c{"a~̿g Mzz5z1}z2:dYI0 AdA~FSƚX8aYٟ+WeQ ݓ?،PdO7jo>} 2j_'/=1WYVC->_,;۶ώժA(pjAvHTU5/4ms e$I"::Ǭ;z 0kBIi=y$gS}B!ú)Z7LcGPslBc&7瞻Yf.G TVֈ0kpW|.Fs3_ʡ1{Gޝ(`߾KHi~zP A5HfTJ,XvoO_N7'Q~҇Ssq'k[|C1WXdaxxhZڕɲeۑZoATT8XbQG~ zHO/$e\ܽ2aIQqcv6n )/Ϝ.IeJhp2½ZBp/z7uuF hjjCH h&--<xXV̌f˩)Cy=q7%'t]=?+N+-:RMxsR얀ǹ8ruȕPwݫuoTT2`9&8TGJHV_MZA{m'%߰jeZlW͛Eak)JJ#**$IdZT= ;KrNX4r 8|Ə@(JL  )Bnl3W#Mڟ-[$::݆bg'?#57"B|Ch3!xyDq}15Զĉ~m. k:}Xt"RqUSP=vw=vq ]\[Zr8j2Ÿ|!ff$M?-; *ZEZVGsͭBλS'9srʛi1zr<AF"ڬm 6f(C nl YY8Gii^^LHJJs2wPƳ,JW}nG.Bތݷ6k:=39.N"}" =1ȮƮر8,hUZv@ s#6(šPZG>L l\%h{hd bРE@]\VEM}w`SbRc7F "1 @q(x &z!}+ؠsNb29+5P0~j}`fʌNìja$=BFKa]!:D QC͕&e\fOVol!HKgղxVQG]B =Fwq+.y D>$aFwXTq,3f?i(hnnFma @e*Ilj޸H&.7/r^4d#WP',QfhR25w6 wT* E?ҥ Xǚ3nx<`%1o| Vl9XFЙ[b2w ᝗` ( MtF,-*ޥC(Sk0̘܇% 0y#薻 4PcBi& K @DRVbh:1Բִ=/&h->8tA[9&EAth\'?u$o2YT~sN#<]z? _C ͏hl6.֭'hj21qb";@k7pV3;~:Ga~-}1a$!!t !8y2m2kƍK@^v+MfPXWzRRA=¶X,vf>TCgo--&ѓdeW𰀅BX̙Ⱥ\ޣ~{Ev.rHJzU|Ya{|g WexH<.{GQUIY!qJ̜_bwBQm\\.䆆+?tLBFGSMl`oWHUt7:CgUp8r#GALL dXn?VÕZ9x 6Bty%5*K~CqqEb#-@_h XOkkLBj8p F&..V,,]0u< cҤDBQ~E+7軻k1"cIKoe`6fz& a$Cme۶u]m(zqM}<|$><:?ew 6LЛ[ع99HP$Fe̘xjk^ f*={9S@FFvqUULĐ!QpUmŅ0sff;'Nތ c٬rAq: ?GDYFZZfµj̟ºu EQ*Xj7;w똔˄BCش>n}0_dݺ4us7dYbI_jرV|7(Ɛ!1lٲCQ(3y{шۇzu`hFBr`ժ2Xņʵ O/_ʎ!!>L'ٕ:^P a޼ᮼeԨ8 ڵz**:j{'=X~NNqkrqMxN +FIZ,aCvlܘ6-$vԫ;Kpӧ'ҭ%8HDEE۷lbƌzV]AQ$,{^"=PMK&4ץ/fsRPt_=  8M/|:>h0T hH׈?ɓQ@e<b~XŽ$>0=gQQ6m s>(.Qb#<;J5j8t(K8=cɓ")Uo Q{q. q.DL["E8 G|6.\| 7;?YY=syȲ5YYel5Kh+?MAMKvep?OX6n)EH-G&+ӹRIx{3fL<E[CEEc-+P$ƏOBjoIA1KP$.˃PJAA ?'G`dX^~y&=귴سvZtjon;ӮF'|BC}~HPa;ͭ?ABBH-__sꔳ pP6Fv0{$ tԝ]f+8{!Ȁ.m:g[mٲH"auޤY:weHE嗧ر/N(鬮%<<9s0qb"AA^>] iqt Z&Mm ">y.q!Nʣ{i}ЧoFHD0~vbtԩɄQ[k\P?hj2Sq|uvX,Z̀QtZ\A֠X,6WLYY#$p`dHV] V!D񧐀P]ێ,7ޛjqYVժjP5*߿#iks&5kYڪW^cMMիlp;dvG^>?w7qqzc:NzlrNw3{@v3gfA IR!u($T*=6_'EEul|[O`4p׹dS\q|qeLKCC;5jռL/;LXӦ%{sR--tmLĖ- ;ZǃXRR((EFAP|p/w=F`O.ʪD Hڵs B f$;4J |쎕11A7`n@)SHuu+mhjzf^zi 755Æ=:6UU-vƌI`ӦHJ $:5//w**in6fwH~߾ᔗPfbu0# b͚w^8&++[hkf/YӱBM%tEXtdate:create2022-03-16T11:51:30+00:00.s%tEXtdate:modify2022-03-16T11:51:30+00:00tsˬtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/iq.png000066400000000000000000000020321475545702100261250ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE&$-@Ƭqͷ޵Yz[]ǮٺOxҾBnrZ]ʱç}PyӾDquɰi_ヾpxQzҽRwƭt%YlLwCpaMxP*]@nDp4eɱ ~Cz={>y;y<w9qu6V}/`x;$XI:i¦ȮȯǭҺˎĩѼɱɰŪū ܒbKGD pHYs''iQtIME 4-?'IDATHc`` H!``00SX(Jl@`67 +/+I  "bRҤ #+'t"%eU5u^ faa1rq[XZ 'GI'gW7}wO/oWGDFEzų$$&%Fgdc@VvNn^~.ZdWTfc@UuMm74655gta@gWwO/tGL輀ۀ~  D 0X g%tEXtdate:create2022-03-16T11:52:45+00:00%tEXtdate:modify2022-03-16T11:52:45+00:00ǹVtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ir.png000066400000000000000000000045011475545702100261310ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4, IDAThkG?U35Frb'N0/1n @NK%>`bpb0c˲4aI_UPI ^@7U}ۯ^w:ϿE4=iC& `vHL 4I!0i{ D7f?0g #B0&tR_ gO#eƣ[\E/#11^A{X84|-8ةh(l\֥c^3ĊËz˱Q8lW((mTHk =PؒVxhHSPIfǸjװ ڂ :Y>A_PiM2 zI#2#ЎC(mɠ2 kbN::&kFiA(mE7=Bbb:x,JMD˴X#@4RIpޱVlЉsr2dQ̤lV۔g4RڒtXǀ'3x8hѧ'(V˰)l:C7=G#:qN$5C26}tVxf#i|C yюs [թtϺxx(啩]Rti [ t-L:MKǔ$11NHGesTFDKgKTe)_lG)8NJ?`1G+MaKv<;[."zE$LmxVg:U-4CY'R3&G-6Y"{̦GHLBjm=!C[fخvxfә1n-ı6`!(3Pl8 Epk}p+L]"83e۷;;$Qinsm! u7ޠ%BrįFw|o/-Q@y&Lz;D'Nxւ'NP߹Cz͛H]駴ΟH`fCE??ϓO>A'>x@u6%[05ʘPFSݺE{T}GOǮCHZۯaWV?*YQjh=TB e?ѱc^:w믱A527zM\wLK7n/-ዂWC5xի _Zqw0OKؕT2s2O\ap߽v'W0s2*M1}A@;V=ƇH@Ӡ#w$O &OB~Kq:ٳKKGHΜAw:`i~ 1/s^ɰkn8s5L E,.yw=:*MSS=nm 8>X{{D T Dj=~CZH]771#_ G\ 3&=Z|Yj|΍/v[{gvܺ3s&E}GjQ-$!~1p>%TƄW٣+Rv>'>5RWUoNxa,R^̿H~<$I0iC& `vHL sVl%tEXtdate:create2022-03-16T11:52:44+00:00%tEXtdate:modify2022-03-16T11:52:44+00:00a]tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/is.png000066400000000000000000000007701475545702100261360ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<9PLTE84Y~ss$$((1Y{W{BB&&zbKGD{l pHYs''iQtIME 4+&IDATH F1ˬلp#,: 6y" I@m@k .A@-@V=ӊi=E3ۑ@z<  ?$($ .\=%tEXtdate:create2022-03-16T11:52:43+00:004ۗ%tEXtdate:modify2022-03-16T11:52:43+00:00ic+tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/it.png000066400000000000000000000005771475545702100261440ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTEFEGؽ,8*6+7>bKGD ٥ pHYs''iQtIME 4/^?$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:52:47+00:00!{%tEXtdate:modify2022-03-16T11:52:47+00:00P&G8tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/jm.png000066400000000000000000000014571475545702100261340ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE6baʡ7ʢstaMaN6+7,t¿wxgu{bKGD$ pHYs''iQtIME 40SDIDATHǽkS0E P .o2inb:!{6,j%[ fL(-~4Է7)t$;SSզ^쳳B%]]i~:ݒ&1\XHDYd G?@棸B .FYI @L ECw > @ׯ} PWe@_1_>#X1LS+Ɵ o׷lF@_"egg- lh[G/jC/Wz tā,x̃Mx]ϰ ?|?Υ%tEXtdate:create2022-03-16T11:52:48+00:003m%tEXtdate:modify2022-03-16T11:52:48+00:00n7tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/jo.png000066400000000000000000000016461475545702100261360ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<)PLTEY L M""-- MM KK II&&::ppmmss GGccEEWW>>33%% LM?-ߥ߳-Mk!Mj .Lk %Yc MbKGD L pHYs''iQtIME 41c\@IDATHǭR1U,Ď  VTmEETX `,R,30::=:3{zZc}t hu@hd VDph@npP&Ā"5bphx TĤxI65=3;'`, k a, ,-XZ^Y]롍t)[;pxt|b4yvHя.+K$l\dcK/r^~5rgXô%tEXtdate:create2022-03-16T11:52:49+00:00qD%tEXtdate:modify2022-03-16T11:52:49+00:00 kyff͓T  _>D1/7@@xW cB~& Wrɾ*$Nh ,oi7Y9Ŝܼ|(0 M@JsjBT]Sk!bZ'KmM5zL M6l͔6566hF m֊ڠQgW7%jvwub>$G.WH= A$ R'c>`aPiyl&d2955Iɜizf<[i$ ]][[+ ,>@'h*k~L3(n[x:ͭH|E Ճ=1;yv|t`S_ gL9 #P.^vu}ss{62# v|x9~F5D%tEXtdate:create2022-03-16T11:52:50+00:00(v%tEXtdate:modify2022-03-16T11:52:50+00:00Y+y(tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kg.png000066400000000000000000000033761475545702100261310ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE.9/H1DT!p)iY =^0@BckWdN">UsCO4 I ez~h-FM`PS2w6}$o(LgfGVy * rR%; qlaxQ7'_<m,]3J\+v8b{:tZu?#&bKGDlZ pHYs''iQtIME 44 IDATHc`怑\,̬l\ldia'Y :hhjiJpVrz6vN.ܼwss7t q#>,C]=""cbbկ(f#_`IE:%eU PZ-_SXgEƦfֶήln|Pkhgd;LbL2JS&O6wLMP^A^Ici5qQ !:ޢܿ:)GW;ZV+<־SkY|ռ󅸦=EvPgy8o1sְ`da&`Kӝ%tEXtdate:create2022-03-16T11:52:51+00:00 %tEXtdate:modify2022-03-16T11:52:51+00:00\rtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kh.png000066400000000000000000000032611475545702100261230ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE..(3$#$%#0E.D#% , +$##-C46#fqco4#jvv% , ,05#0/"6JAR#&~2 S\"bA +()%--#)!A9yEAUTY" râ΢o`hΣm50#hbjfna)(hemckg((hiandX tvqus pwsuq$аȨظĤԴ̬ OH,(,*.),+-P,LN%:Ʀ̲斲ƆښjљS?o_YOwDRgG{Q>q)SwvN9cZ)IfOd!sΛ?uE[Kflj95~S/]6._rUSk5}]32V_]vr̔&lܻe֭[V7Nali&`@p;w޼g޽{w)a4n޿sǁ\~G66;zر6o35n>~ >yϟ=s e/^15^r' pn߹{[n ƽwܾuk:Ϟ?W__zc1@ce()X(F(Z6<$S%tEXtdate:create2022-03-16T11:51:37+00:00M%tEXtdate:modify2022-03-16T11:51:37+00:00"tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ki.png000066400000000000000000000107161475545702100261270ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 42d2IDAThil\ue6e"e-Eɖ-[8q8 $MӴMC ˧h@i7iqٕw[d(JqÙy˽fdIv@:r;s9ݛV !Km{mntZ0}Ÿ,GfV!aAX _`UPmҊLW܃O|T]R8 aIxO1E au]f̡g|Au9 Pµu@NyCC$ްK-Ynd5پ,j->"4qBGh;94h6e_/5:_h ȝI ?潮G@B%"&*$pN>:]JPB"D,_lduj҃bbYF'Lp5Ѷh DD"0C1w#upL1n,-0[#EvN!@ ]f%4a` H_`6"pX>`5[¸IDI0cC \Wa x2%Ji|E"Zн{}"ݸ3 R 0u йa A*v;pGHS)},di9V&"E4U Y"gCB@<MMwXuK ܑ~$'{u*/?JԶk8Oc6 2h_]_]<ֶz7Uwo;/_`|& Zcj=xy ,$LƪR_ׅJE2x2]Ð4UaE 3i sax5-ѐT*lWˊ5$#d\s~fx~PG6JM$cTaeQ62mJs}c\b:.8?iM&g:yaHxZi,wDZ%e=]?<́+G,vg.&ض-U-'Su k0yÒM6 gUyhR&iQ T 5;ŎYd/3c{gR~TE2Pyr o㰻XRd>[& C: }3 ].|MrT" .gױhڥ.  i.d b$4=ҠLO4XwkO~ !7lD*GWn&c:I!PH2_+M6fRb+FZlMj̷տҕBa(9n`{F6/ys4=܍s*ezRJr V~7X[*_Z{!T;QJs%| RʴTIDiw6r\2z@RKb:-L N:=w0RiR&vlȶtRzcZh2P41o%=GLV6TL~09\{#10TR`[z9zfՄ?{EKφ)]SP} hHT0;y\+I{*~0DmN9V|tE(їT) miX^ayk`sRw}ƖD܎Z |d[ IuCЁͽ:4讃HzG]/GT u;Z,2'XnbV> s}~O3;03]T,rlK1 lZ,z {ƀ?B:Н%tEXtdate:create2022-03-16T11:51:52+00:00Tk%tEXtdate:modify2022-03-16T11:51:52+00:00%tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kn.png000066400000000000000000000052501475545702100261310ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5"`t rIDATh՚kTT3̅a:IDr`",v-5k%1i5DC\6Mj-UkSRU$5h/јxAn \NaAwΙ<|xBAßZ/Sc"!2rPH(@RBǒ SHKB =>5. y JI$ep} " (ol{>eWk x2^ kX;'I}>a.[=ѭSBRPQ٫`V{'Av߷pvx\7`L8L^:(+?OZVdt z [`rsv ^gԩL2T*zݎBl63|֬Y|,΀Q#Agpa)XuN4ny<MRO1Vлwoj5$ȪUp:dddpYt:.={\zLz f }(ầxޫfm=f̙3׏kjjpO&??zӘG' /m2.~4O;4 7';>lڵuAJ <ವ^_4AhzucgXM8r{ar`Z3.~@g:ظ>AZH{2AL,X%P]x{[FVǹfDhE`wxz/WS4m[㺾Є ay*}{ia8xw=/j}%Y,'a#}uc<oøCUuVkϫ 4z4AZXWFm LxF#X eKfc 'PCݡc?_dN +W)lzGUZKQhΝ%+a_1622^`0`Xhjjj׍c`4P%te(nVf+d0$]h4:5s[Rrssc$%%Nff& o5K/C"hwFB N 0mV8N:s8u#F`Ȑ!sq |c ̙^{b{'gg5l.L@1v;(b'pĉ67*4?J@!8j<[ HѡO`J8[q:222ׯ׵F7o/_ehx-&Ut}s\<丄,l՝1VVJjj* F#jjP*ܹsry5Kav/گ^Tn3,˃Um$IhZ$IB$BCCٶmF)S{nZ-Ʉ6A}SPe`Z9~8VZ cf@Bh(҅P ή@CY|IN'%%%Z|HxMxepݔ-钸ޕ_H[x, OO F'vp/]zpcDE'M *Ae4]n;PYh\v[]ݧN 2fS!BZ_i_P)!Yx<6랮U>0uHOs< s[FgC@ﺿ < fMFArU^ݜ^ P*!)G^X"˽T_/@P.HtS'X98;u{-$EY}_ Y>R;0Xܰ+%tEXtdate:create2022-03-16T11:53:34+00:00>%tEXtdate:modify2022-03-16T11:53:34+00:00?tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kp.png000066400000000000000000000024701475545702100261340ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ< PLTE=T>U>V=V=U:S;S{{ 88rr鞞ﷷ멩䆆PPKKww搐<<쬬bbHH靝ꧧ22bb__ㆆ ""DDUUWW飣痗颢ⅅ㈈㇇;;SSက||{{yyww챱!!:: ii@@pp &&ꥥSS먨((TT88癙VVNN蟟쫫))몪tt YYUUaa吐WW뫫 蜜aa䋋[[IIxx99tt韟︸쪪䈈QQyz>$+$,"*&.!)% #+ #&+' JDb*X:T$dxki=}& +d F)ICYXZYC%d^;{.m+G'م\!ifki/@@@gPpHhXxDzT4[y@|x@:+<=+<<|u  VM-VmA|B%^yy $&e`0Nw4{@YΧ#N>(P @}& H -f&HsΛ`K.T1 $<` 3,00 1moj?cvP%tEXtdate:create2022-03-16T11:53:12+00:00ay%tEXtdate:modify2022-03-16T11:53:12+00:00< tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kr.png000066400000000000000000000063031475545702100261350ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 58_ IDAThZ}PU~p?PEa@Epguiu0jE -"R'6k+AWW1e4RQ$),K }1p{f뙹w{;w/P;0Uv`qGTTTa}ACC*++̘.3g9sXSS㪹Q]]g~벽K`Xc={Jhr ^{5\v صkl6EѣGE0!!i& Z,A'x'O}}}xN P[[ӧnPT2001׬YtnܸIIIj5jj59_|z `6L?>KJJFQ{nfggS$N8.]4.^ &Ã;(NRΛ7/Kh'o0,Y¢"Ã4سg CCCy).ZvZ԰#,((`@@j5sssErjUWgB_P0$$^nXQ}i-[ɯ.W Ql%YΫVYZZړ W?~_n08qF#֭[:tHII믿Z,_+Vp8lh>.=wރ  I 7^A[}q\JIC{'A X`***7x6l@@@rrrֆ jv |2>CL4 BVV cǎ!<}uamjKVTv;1~Wԡ_~WF^^֬YTj8C Җ-[8Ç$IlؼyËXvTۙ3$iQ (¦oI w}DHH( 6) sGHtvvBRAtpw+u-xO7,o$&d߆1e& jD~ F<}QK[-EZ MǺ=$Dep٢tZe}݊?Cy]PV1 vDbk@ cY9h;ZC$F .|oji!6û */i86IsK,Ưe4nm>LdEP3Ɲ yY,xOGj~-{#{hfwCQg x{9]" jfb}ypVav/>j=w6m "eH D~Ef~"V Qtn|5 6$%ǪqmGPRѨ`+FW7XFШ<%DO'S"*o(U|QA@IΩ!=7B.\@ehZ$$$@93#d$Ed7NWc6_pVG}NSSS:;;ÇCCJ O/gn%OYz=ڐ;j^UPTTM6۷oǤItRTWWc֭c| fFi{׃Mn1/J0x(jQWWXcΝPTxPPPիW㥗^\vI`6/D||BVWWs+twU>,0&&gSۼy3'rJrqt޼y,..vX euubΟ?+V`MM m6"myhjjSO=frySA#Rd2 nL&z[A5|A~`]]ݠ1jkkSNqܹN1cxşh~w.ۻ\2 >AAA ._ ɓ'l{G?C_͵|qh%tEXtdate:create2022-03-16T11:53:30+00:00ۣ-%tEXtdate:modify2022-03-16T11:53:30+00:00ptEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kw.png000066400000000000000000000016071475545702100261440ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEF5AA@! (?AO6 (6(>N (>M6??+SW! !!!"""###$$$%%%&&&+##)#0E3H ` )0..).00 _ )/(^ (] )'\ )&.[ (ZP'0J)GkbKGDo pHYs''iQtIME 43p-IDATHWW@8,ذbJD..pvsE~5.g@Ooi3 2"04Lh""Jh"bd 2FvGH"d`|b 65mgpD<XXL,.X^Y] ֹfvngl q* ͝N yܩ˫k۹qp'mvwpw1/ּ<>w|;ZҞۻJPTIM$7yxG__r%tEXtdate:create2022-03-16T11:52:51+00:00 %tEXtdate:modify2022-03-16T11:52:51+00:00\rtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ky.png000066400000000000000000000111311475545702100261370ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 3)m#IDAThyx2{f:I vDp Bj/XE*ֽVRBW"Q֪-(@Bef3{{oB{s3#UK\=Do"v 4{hYv|`2OHC{7x?YO]?O`o{^fwGfN^7b虍ӷꉄc̞y :vǕr=Y,:.?XN߁^GS5& ɣoM$GJ6lAZ6UQ::} B#eP s>t\2cMm!Ih_\Ӈ7ӼcSW!~Ï^!98Ӗ9w ˚͕X..'UԿܒ|.ݗTg ]id+ƐqHTx;?q?Ƣ-e]Nf,IjAh a$8-zEx&hj1HNacf7nqm'.`"{N !ovSp1I>OUW_"r03'~" mˍ}x!?؟*WC\*/?AǿeF ,d3I!G)U՝٣٧W!|A‘8S& fߡwA&Z4gT82܄uH{*r ) AKjr Kxo%3ٰ'/& 4 7ΐeۘxu!^>sU8,()pUF%FaԩddXq{GJ!Hh_λGc65ixv -ZZ:VV7%iE|%s:kVoduu9Hizy_G 㾹|(;YGq&AIѥN)d;pY5g;Xz;T4DXƏ~WMH2/&hjh?-!3+;glѱȜ9 =w1wn3xg@B$/-ʦC(v+F%O!L߷ 7GnD09M$VM|Pv- +Մk1yYރ$Y:=_͊?bܨbD4Fr"{˙|vBUO'$n~f[«+7Mh8't% /-'} |0}:J ,8%w:ڲTxDuw0Hj>f8 &R7JNklWh]V߽K0"Se&[GG O3KP]gNY~A.DAi.k cՑa1o(17UuLǖ>w8onu{:Ow;hHL8ť_s=O>01ÊȾs)CQ`5Ͻz,?zx"ɡB@X]gbqvHxz4Յ~a@f RmvggerZ{ZDkE=9?`Ӏۏ(+!=@R`68n 5}@%)0l6B35|^Lz=N+txPTnԈ.M-mX;T:h!у!0dzsD"7aA"P:tNWh"@6P3p{;c]Eʰ!G$<'X4I$NipH&0T2;{ ,hn]eӈU5 R zdVQJR|L%E懤L|u3f," UVp19?߳FBv-nbJLwP e<046)!;N:߸ls_K0a-eoIEO.a^4z:7Sןθ['KxX#g"ɄUgkDw)z;.֬ҏG`H CM}۪I5`'n&dwʈf2i(=nEƨ|A?fBS0*wԞQ26U6m;!Ew<@ I)v3>Zȴ^DD(EEYSST}o_k&x` B^(߈`,ZZ7Feds|Ay3^o&|Ze;fd\ bBIB,oիI5p̟Q? ~ q:3ّ2 Uȵ62\ጲCǒkђ Xz$#LKi9V #@0@{zz9~Fe}4j@F۰9 Ns$i İcW"2\$BxlphL$y- [$Bc>iP)Ͼ5/4t*c%ЛL*Ơ(0o It!Gf8E(1$ZCfB4bbm Ȇ*O[YDY-D)׫V;p3Md:D#~Z2 yLGKkGzF:4'bhI"lwHnNcGh҆9>OLg"A(?Jq)V?Hh a%&7rE#_X$I NFg0d6FՂ0`P- zd B .JG4 j$YJe'^ ج*ՇlB(t @':;ɹ\{DzV;-&4f `,D2`{شD<~3O>]@NFda&6{hm>wJ6سM8| rR_@'eY%%ňժhTH&`?J4;_(@ohZ?}8a#soη?TIh%tEXtdate:create2022-03-16T11:51:41+00:00q%tEXtdate:modify2022-03-16T11:51:41+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/kz.png000066400000000000000000000114521475545702100261460ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 41c\IDAThݚy\wq?ٙW{h=$Y]ےe#D0ۈ8eVÁBbR U `66>AmY>diukfvyof{cfGxՅz3;ӿom` +c%X,>S- )>$q&eb ;&DP|l,=^xEI{Pt j,$xI~7kY,`1X,h )4pNH (>S;Y2K}@FHhVwjzɸd@v %+i0 }2JM+$q&Q!(_q3.D5$Y']Fb(-bh " :KzH f1 ")Ý!\1(3D^4#.a\0p0^{YοYC8 !r( VQl!mA>?EԸ=pV){+.;n.s"U28jI~KP^ JL)@䞪xMIT#Yjg} S|wDu>u!ezYȣJ B0'UN9N5wT CZߢ7M"9;w5GVXLI>_ ]憒a;c)Uˊ?f1l KzpJ*3Y7W9肔EIL6>O%,h|ϔ䶲#bbC8Hwo ߂ߔX65q TCjkΜm`;Ǹ p>S5aY)_-i ;ΗHV25$<s "qwo<~S? ha@c)!)CoPv9M{f?]ͥyev)=_e;  =ȸZ¾X -'XzcLe5EP!~mbl x~*R*-Q= ͂kwLe\ LvvBP59csO?ծa~_D}q>!ˠG 8[W7dQ>KRy1J)T͍V9GZ] ` ~2q=Nv;L\ :9 H\O:@RPiT'CXXhֱbH3DR6Tv5±d׸D"kon(eRj/VUЯ\=@00 ZO??Pɩ5҂4 TĎP;KzKqwo9]u0^S:~\Ɖd%I_5?Y Oo],D9AQpQ Po 7ڄSR/JsdLxE06@wYC.7˔P"),.+D8VvKzmCn&fXCd}I2v Srw朡˳-Tc$53]FdA;/DfQ/`jzzkme(%`l=iݴFAyTY<2y-^Ś:,0!"O%7 Ά]FF/{M%Nr"Y5dA#YhYba:K}q[غGNU&Һ\Y΃3~2ǧ:X>wG6P wS|T#| /`4)3:4]x́4QihaW]AX%Rmjd_ϬDs]{xn*JMI??6FbWpஊ71qs[a~<ծa܋@5L*zobT3y(4C lbwd 9;gMPtӼ۠]` l#5+ `-H- ~U(;í-T# :e"9;ǓU<1G6үyxM8e7yrV8ypS4g0 poo"O+[0w8*TvfQЉl'm4-):܃ZgUJt#9A7D\w<˼><㓝%2( 0z4GOE/RnaV1mݟ.,wa|e&T7YTYu x4{MlYfҚy^s84ۦqH&T7Yq4Q28Sr$,XgYbfOϧ:\~S)^glf}J⚅5lr6a}) B.*hOs9b ŋE񥺝<9u w_Lv2qG!,bW3܊M" zO?݉jJM)alA C`:bsvLݐHjͱ1p+3'D5/qH %rϞٌSR:1Ճ 68i]x9Ccymv)r}Őreы|s`F݄ERdś,BɌ/'>a>R{g2qkYÌ1c 88̻!3D~8~ Yyhl=i?i76׬<2qcq*YSLg]5  m"DR;uDq6Ct?h&Ͽ'BI*1$j0 WFPtGQ,gcVq[B9nhisNp:UN$d6g,fML ׬X]&3.tCd  gl恦#u=9.1j_3ȱd5G5.Vtu/3-oЛ*cPqoSK?ʐRʮp[!!ⱩNa ծa^f9{vq q͂ߔd*f4JOeY+KIiԔ=ehIxev)ER S̋`5ZSI`:xN F7w;㏩^T/-+t'Ik!:]&Ͷl35+!b &Zlç*3dk9&k·<8SV9dgݑf2 W3ջJ;GʸŶi<ǝޅ 'A)>W*.jkhf첂]ʰ5L}̼YWNqW~LV؍՟cK^TNV˙UlڋBK`!XD+Z?Y$'*fy4EtvZFF^aK^>Vv}7zG5ebY>W*]#Ln^mP;7#\'j KQt97#"KR41W cZg ey^N$+*>7vWFm⑉T||pV C@t*1j-|NIpfaR\,l{/ :achSӫlyaTΊMRiMsҟq$QÈZBΐ0 ;XKzO>&3n*UE\k׹09 wJMIF/f1M%=p71Pu㪇J?i?O%\lo,h\gP]璄偡? 8)A9UROuCD1d&U.+Ⱦh᜽pҨ@kz9-+4قqY !r2Yu/jwIЋ'c2.~N*s"ExgwHȗvfMT# :ά,h$usb4^(ro/ߛ {s(^D-aR/: 9ZGGTJiS*[ fp+k\Ct'!^2^QF}%tEXtdate:create2022-03-16T11:52:49+00:00qD%tEXtdate:modify2022-03-16T11:52:49+00:00>Œmm44  }88̟ѧttuAA  ;;HHCC ܽ׳,,|FF^^11bbEEWWhhۻ22tvvٸҫuuЧǕ%%{v//++ƓZZ!!DDGGQQ΢Σz33]]..y00KKxddÍNNjjrr &&ɏď**>>|{Îܼnn&&̞y\\99ۺiiЦMM33::ŒIIee@@zz##{//˜RR ~ ||Ӭص?? } ԋ‹ƒ̥ϥݿŠ$$**Ƒ9;FHϡXZ~.0ۺޣ|]ҔuɴtUT6̻ !c(bKGD2+M pHYs''iQtIME 45E0IDATHc``xF&|F6|n|_@ KHJi(+(e6șn8{yzy;h@@`PpcHXxDdTtLl\pFMecPNtͶ-;v]dy-* =Mp:pЂv3" 8|h gU l  bcN.zNbR pvsv50;\x׮߸y;θ QZ߽wGٟ<}W,qT,o޾{RY?3ea@%tEXtdate:create2022-03-16T11:52:53+00:00 %tEXtdate:modify2022-03-16T11:52:53+00:00hctEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/lc.png000066400000000000000000000035671475545702100261300ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5"`tAIDATh[lU3[PĢr ^cE1^%1Ƙ@0jc'_|L;eKInJƵ-.n,vs|8K4,—lvgΙ7GY!W@`E _ 8 PAMxpV*iAѦJ?P^ <6 c*M)NX@y` 22] om7t=KAM<;R?7A  *n炙,_06'3’䝡|.twxTX4>YbF} T-!p*xo3:Y*MH V|cGغBћjc|^~h?·}OK/;',1@؇am7ŎQ&@U{;[.9kXdF '(㗸FY-E?EI|Du0cΒБޅF]S:~1bY dBt@Xck>[2޳a~K_}߅ &Ŏq'oCIga J t ŝʥEJx%tEXtdate:modify2022-03-16T11:53:34+00:00?tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/li.png000066400000000000000000000023251475545702100261250ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<FPLTE+)~*~)$;_ /r*+~5gMO<5DO,w*HK:3BO*} .t /q-v*|+svk3:GQ(+y .s,x .sAJHf_0lb.`[3MQ@?HE)e_6?HHWV9g_0mc.XW8$;]+{HMCv$&&{#udqayg wf o_o %&%rf*7d1mrf,***{"UHu!p_fV(**(}%AJG3i{m*'+|#r s '+)&IOB /ppf.&&)~#r`p%$ral('&&:FK8f2*xeɪ0Ŧ/o^(,ŧ/tcа1o¤-edE){CŦ-ͮ1մ3:8p^+:ӳ2'6-ɫ3:M^(=M^'ѳ2=յ3=>в29>76%|;,w .u?ڸ1ή1,))+ӳ1ٸ3NYY$9X((  283 /u)}#o]PF@>?CKV!e&w++'t0%&IbKGDdfn pHYs''iQtIME 47iRIDATHc`2,lg!O/;pqh/ ($,"*&.!)(C <2r J*j$:GK[GWOҊ4جmm]\=<I4? 0(=$4D?GDFE'$&%3肌̬ܼ"bҲr]]QYUWS[WF ;:{z'L4{iG3fΚ='u h¢K.[bVYKFX~Mlݶ}]d  @RaH}QF 5`ԀQh2%tEXtdate:create2022-03-16T11:52:55+00:00zN3%tEXtdate:modify2022-03-16T11:52:55+00:00 VtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/lk.png000066400000000000000000000046641475545702100261370ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5 zr~IDATho?{^6v8I FBڪ*ji+@%/ **Z 6!!qIĉ?ٹY?@⍀#vv̙{<=(;—\P%YOwZuh9F(/'8>c-}2Um}@5X m3p;+t"4 [Bv śuso@J .N9x_C1YQ}'er\sd" u@n^k_sO6\v>)0!alT!M]up(>z\]u&K7/hע=ÇM06''(U6RP'J/z%?Ex-i;4vg=G+l))z6_vP`2hi 65+LLGiPxFFjj}@'_. (QT uD>% 'ŎDQ#$up kځ.a#kAZ1tSD`~ :vB" "ZS ~4MB\fb4Ru7 %RL}E",{zAm5yLU5i1̍stL h4'd\IM3?*1xM*E}w&FBM`OWUK2BŇt8 ]] fn(!l\dϒ9BRJφg 1C>g~%νc쳸.x.NtP!*eůU?;\9E9PQMwޤx=ֹ,c{j9z ^zS!C c죆%A @q=.s8BTX [<4Ch@ n̻\) xu5Ў`|SaBE9>r'tNTtH2F4K Jef4F a9.$Rf>to:PDY0TxJփ{yd}ׁz)&R$Xl*cf-Z P,/njC;B`}eDI#]#Yg;l)" Hxц჆ZȭPh`ۆtv>Pᐑ*ՋIo`!^A1'RsG%>\s] @Z<>xD:@;`*YV}"\?Eߪ%FrE4ڠh=? *LF5ũ~eSt謰i 8c`n:1gC[W!&sF+-Q CV{Bi9++*^t{q#W4y ɳO=fH` ^ -'n5ЌXJE/xda\7(8bm:"jEux^比9Po'ˊy  F8صM(tCqB吻u$`L!K= z4W Wt {;I\]$qW!JiELGߊ_ǒYO};B̖2X(py WB rS$&'q&.$ %}RcBׁC̝3zcxp_ Sg|R :IJtV >6pրx'Caѧ)X*NH*f,I qf #>`"[lORZEg/ >P̞`<{g4>Pa`riJ|:[_"ų.cɱVhA.QJpI.1 WQ'fw@T+vB,Bqw ljh_Ue4}XY(Yh)@`/R(hgJ@,+蜏/w*`ou ƪRw, @fk߫0Wzh#Q{1 yF(ohXJCY'NKΤ*MǨljڄ643i&vՙXjYζ*:+FlW+n-򳟋˝p`n !%tEXtdate:create2022-03-16T11:53:32+00:00D%tEXtdate:modify2022-03-16T11:53:32+00:00 tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/lr.png000066400000000000000000000020631475545702100261350ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<}PLTEfg2Oe55t8&t☜쟞랞i]]c<<d//byy11s**((~))~44ߌ,,.. m9+y歱))ttn3P pppAAg++uuocc''|3Sll:1//!!z99 lssCC ldd;;hq$${++7imqqqqq2N2M::8:b::::<<钒pbKGD~?As pHYs''iQtIME 46cyIDATH͕GS0Fe 8HS%K{^;cFb&uћW" uEQHKDߝ-kٓCX7 \O m1 RJ|ZVAP[W6R [ZAjk6 F jC2 !]0o=E+v;@X)?ȁ$*r7jd%tEXtdate:create2022-03-16T11:52:54+00:009%tEXtdate:modify2022-03-16T11:52:54+00:00d];tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ls.png000066400000000000000000000017651475545702100261460ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE יڕsrpuusVVV///777WWW]]]hhhYYYfffSSSZZZbbbkkk\\\000((([[[ddd333iii666 --- :::gggTTTsss$$$``` 555222llljjjwww@@@JJJzzz***ppp߉HHHOOOLLL&&&888???ēmklWTUNKMTQRYWXpmnӱԲֵ׵ϭ˪̪ЮԳABCo!bKGD>Id pHYs''iQtIME 46c#IDATHc``#B2WsprqU^>~A! $)iY9yE PRVQUS M-qm]=} 0042115#6s K+k^6 w }G; v"g;0pq%7{<`e>` og'OAV!a$#`̗BiY9iy"[~AaQqIiYyEenU 8AMm]M}CcSs]m nU -xA+WJ!`h0j01$7%tEXtdate:create2022-03-16T11:52:54+00:009%tEXtdate:modify2022-03-16T11:52:54+00:00d];tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/lt.png000066400000000000000000000006251475545702100261410ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<!PLTEӬp?iDjDdB10&,'-E'bKGD hV pHYs''iQtIME 48 7IDAT8c` J1B0 4` f $R`%tEXtdate:create2022-03-16T11:52:56+00:00K%tEXtdate:modify2022-03-16T11:52:56+00:00:LtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/lu.png000066400000000000000000000006161475545702100261420ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE)9'7BP1XbKGD ٥ pHYs''iQtIME 48 3IDAT8c` J1B*J B 4` F !ؙ%tEXtdate:create2022-03-16T11:52:56+00:00K%tEXtdate:modify2022-03-16T11:52:56+00:00:LtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/lv.png000066400000000000000000000005741475545702100261460ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE21&9d˟bKGDo pHYs''iQtIME 45E-IDAT8c` H0(  0R (AM0F( []ۿ%tEXtdate:create2022-03-16T11:52:53+00:00 %tEXtdate:modify2022-03-16T11:52:53+00:00hctEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ly.png000066400000000000000000000013461475545702100261470ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE  rrrŤLLL---򒒒111jjjhhhqqqUUU888DDDIII(((EEE%%%222yyy))),,,==#F#F"E]7bKGDa pHYs''iQtIME 47iIDATH@EA@ cwD?Ƞ(;>N}:ٙ @>`$@QP0" B Fh,H RL6R,D\Q>uѴc=ŝ<O,;lA=܎I.$#FjF^$|Mʨ ^hw:N12R1*-?N12.*-]E0`2;P1*-\E01.Z2Y27Q17P1o?/(U1WG0`2(- ^e0F+^8Hx2N|=/>> \7jI>me.O :_~~/g ɟo7Jǽq Zˎ=j%tEXtdate:create2022-03-16T11:53:05+00:00li%tEXtdate:modify2022-03-16T11:53:05+00:0013tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mc.png000066400000000000000000000005631475545702100261220ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE0.3HbKGDo pHYs''iQtIME 5,$IDAT8c``AA`0&\Q A!O+%tEXtdate:create2022-03-16T11:53:03+00:00S%tEXtdate:modify2022-03-16T11:53:03+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/md.png000066400000000000000000000054341475545702100261250ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5, IDAThYUg%+Y+ lI@@P`B/Z.>`Vi(UeZh &$$ df&3z^o>|eVNUW}{s\AHHoxWWBd4DȊoG:-bu[ŦO1\RIqq.rH'@t.^M HN  XQnV&)!W;){zX058 l0K8]#H@K;TS cGCBy'l+Jj*gl;?;Xk+̻oASLNe;;:ic:S#9v< 4 H "D+(4K8ƻ,# 6&j B !̊xrAJIIj5@\PIehgB`]hĉ8bu7lA\Do9(8 XX'WlM!ީ' #eE\ LRUv\|'7! 1TMT[X򢸄HPB_:7j# 4`|-N|Ah&H 񎍘OY~>>BtĈ# N8:|ڻ(n%{Y.}gmW[ !=w:F\_},r]mB pj |$c#[AD?P}!p\yU@\a>L}%j'k35v1Oqm;xk艍^m²B]g1r zҎƷW7ʱ&]U9s%|!![oP(AoBV H5s??$;8_0J =Z.뗤[Ŧ,MXl O*J%tEXtdate:create2022-03-16T11:53:03+00:00S%tEXtdate:modify2022-03-16T11:53:03+00:00tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/me.png000066400000000000000000000050101475545702100261140ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5y>IDATho\g>a{#& ΃X呴 iB(̮RbH?+ciN$v("x|pl1sWkJt1`W {QU!2PpA*; }?5?5N0U-gq'j Y(AU ` P'{y[So?yv#}Qt?ހ) BAb҂B,@@ l=>FǿJbAR'm;kH׃'(dO!JŢ@ hK\(@O=uXBGcdžPavo`o0TTYFcCy}b=)f @J2^qA^˩WL$y.[S6R=q/''?e)2\~3''٢gEb9d >|,@A3Cl>jbIqt+4FXH9<eK#w|nr<&j-2dmO5LA<ໞ1.m{A1.JfuƂK@>/~k.4/lҢ=]o`M^@~-WU{͗Kx%tEXtdate:create2022-03-16T11:53:04+00:00{%tEXtdate:modify2022-03-16T11:53:04+00:00 F8atEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mf.png000066400000000000000000000005771475545702100261320ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE&T%S'T'%&'bKGD ٥ pHYs''iQtIME 5"`t$IDAT8c`Fe8Q F*U0p%tEXtdate:create2022-03-16T11:53:34+00:00>%tEXtdate:modify2022-03-16T11:53:34+00:00?tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mg.png000066400000000000000000000007011475545702100261200ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<n$x^VQ\5%tEXtdate:create2022-03-16T11:52:57+00:00%tEXtdate:modify2022-03-16T11:52:57+00:00GtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mk.png000066400000000000000000000031301475545702100261230ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEV>=61.vv-\*O]5'&# {T2Z _  `;dG.<Fcx%=YwnPmei4G,~D(bKGDg pHYs''iQtIME 5 ˥.JIDATHǭV_A=v9`I$"wPtBH B *(vE[wr#/μ}ogwv8. d1 = L2uӉd8bB2E1th퐝ųlwY-@;W|J0+=Q|a$Hqv2PV<)* NdJ/W1BBۼbNR%ʠ3Q_RWո((4@AohjTWd֘;@hS-DE_ Eſ݇]_L@IG< ]wwņl^|O/}xCgQ~_rA~;ҏeD((@P@O@CRT8KB^O@A| Qg#q $H8SOQƄ094& FV&cf #q{r>EOXZ spc+7nޚmX]-\ktLol:9wsS=Á"b>X$ ?xm!Nt)@Ng_Xw_3cfЮ7Y; V\)^'*-~ 0 ~KJpÞ|xU@B ?43322110100/nm?>IHNMVU_^hgsr~}҉וۡ߬حୣܢזӊ~tsih__WVONIHii54ttut^]^]ML@?ܣܣ87Ҋrr]]Ԟڞ:92201NNI3G0~q8866硟硞&9&8.?(9&7FTs~->r}$5kwAP%6'8'8bn):am/@7G%7IWR`&8R_v0@u*:栅bKGDYz pHYs''iQtIME 5\w%IDATH;ALJu(?fv-~Q;SI7IT!K$םP I?:h3ϫyܞAh(ho-&F_l ,A ޠ%%$'$R&'ˠ R%!ŝ̬5AVf$ ArsSsFig!AAt .ܶ}]Eݷ9xJ8y>s _\t_ W˥[ Ƶ7C`*oUU+}c]Qp8 xPٯ-" x?vLY LqUP O465Fq= Z[ILH[x.N"::BWC_](A{¨X084lwFF,Ƭw#Р`NL0N}4 0AǕlzf?Y,k}i,_X=S}qa^]cceu[2\~ jE%tEXtdate:create2022-03-16T11:53:06+00:00섑%tEXtdate:modify2022-03-16T11:53:06+00:00)HtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mn.png000066400000000000000000000023271475545702100261350ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE'/&.'/EBrQQ&/&/'..-`8*%/B'r+-u C'.,Q#$/S#w--'/).X!p6*f/,M$--K%*-S#dR#;)fkts1, I%,-7*4+=(a|2+V":) D'l(.^ 0,V"v!0x]  U"nu_ 5+@(yq |~j [!vgZ! \ |j}qJ% *.9*T"*.E&3+ ]bKGD)Ԏ6 pHYs''iQtIME 5y>IDATHY7[a'IrBST!j )1S)5J~j27ΕCB$yYށW @@@8 $ 8)%x@L<QhRƱO$WH-{nMU F@ SYi1 Y@Nn'}~AaE 3JQ[m2JPYZ_Vf"`-mr{guWwOo_Ih20H~ Fǜq~b秚i`nL,kp:Ét;V]^& 4i1,nzݑ}>?'CLst޿J?!- ޳7vFr\@1O Q/nl!%tEXtdate:create2022-03-16T11:53:04+00:00{%tEXtdate:modify2022-03-16T11:53:04+00:00 F8atEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mo.png000066400000000000000000000030761475545702100261400ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<RPLTEx^w^x]x]v_(R}Y/P50P}Yv^87}Y,QAK*R9M"*Qm>g@2O1Oz[JH/IIz[v]HIw^Vw^w]w\?X {[,zn0|;L0^B |Zy_€;MCJ4mm |ZT)>,=2T5b2b3a3i/`3`ac2_4#n,$o,&p+rzuys)q* f0n g0d1d1:x' ĭ =y&a3+r*m-_ dV!6v(b2޷ݷb2vZ!l-մ.s)׵m,Z ?z&xh/g0B{%wͱ i/ f0c2b2^ Q"Q"D-Uɛ6&:Ѷ+PD#x< {b$ (ٵS@ѻg^D .(-;P~Pyea#GuяoP]/>q:5 j9K^kZ XW xAxIlXeЕ1|5pzS^p#$4ߴVoݎ Es6K-m9B~E*MoT#s85 w< IS; л{DH[Oe>Kv^|Qgt`ykPR/_ #t(eevQ2Y_cttdؾv87o'SOGA̬YsL&1?gqvFLD"aaяܱ 'a #s,le9$Fq&]kZM,/_)TG??1Uc+XX7yŲk(G]@Q`(_q/Y[ ;0 %tEXtdate:create2022-03-16T11:53:01+00:00)#z%tEXtdate:modify2022-03-16T11:53:01+00:00X~tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ms.png000066400000000000000000000071301475545702100261370ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5~ "IDAThytU?sx3PA <Oj)*TPRaYVUK) xsdx"‚0nLq >._<0+Gce$}W z?rCC9DTw![DNa=JKRvO>z/!%%X֒ȱwmңg</ryz0c叉̡-ῗæp3f.PA-}gLWf2u{`yHݽJf lMNNPQ_Yx O gF "l"njc]ǘt*P^fa 3a܏y G^>w;Kǩs bbB 4,YM/Ixf:+ҝUs m~z@r"#C4gJ1z`osi)1'wE9jw~@{ J_d{HhfJ+d_@dd(!C;F]Qx$@CS[4 Ԑ`pTmyKϾStYH׹?]YѢڄ"(.e(- SBE))JR eK&hY#aWXZ;|/y}VY|{lT&r%YaY\V| R9ma>t)WeV+=$QI;2 -#F)?kMJ8CQY6ȏf^gH6 Y7pePo]BaЫ/H nƤ3ڍVx W$I/\ 6<o|Q{!23@^AU}e+9K4 ؍$j(GE+@ څE:'ڶPlfr¦uP>9[]= @JVhy;\S'[aD)~fɾ: oY|s|oFNAԃZ&lĬ{ק dcp-Q *< eZ(NM7(+L]pWR* -UYm bn *AfE eƂ(ҝkʣaA65+q!VKTIFZ˜LVI枫I3i '(~ƣ{l%Ǔ^UUi7k]!o7}gK1(gg`ׇҥk)zy#nPn$HAI23- ˇ3\K9csox˯n]e!aM$ eVV;J`K"1PPn}:/<yFg开7\OHJ y,|u\=$qn%{>-ۃCņEiסBBl8ӉbEChU=pW@q1ޙPnQ0(h I3ks= Oƃ@4Oxt.C0 F7Ob 6MA:gtp IBB%3$ȪcPtj@Mg +Ǿ(֯՛pݽbG&ęJϿb~%.]#f94[io73+k?zd6_{| Sp":[Φol:xG7b%tEXtdate:create2022-03-16T11:53:05+00:00li%tEXtdate:modify2022-03-16T11:53:05+00:0013tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mt.png000066400000000000000000000022161475545702100261400ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEܭ táx¡x̟mƢzuǣ|wǢ{wǦ~ῪȲ۪rwzuvʙgˤ}r̤}ss٧|otwsttƚcı޻ھǦuƬvvƢ{uة|qtuǙeobKGDYz pHYs''iQtIME 5R'bIDATHc`Yaf+;ppm7// o@ 2@|()k.郀X;8;i8;{xmqI o@h8GD:;9yQ`$A@h⥤ouZzFFFfVFNn^~AAaQ1XRZVVV^QYe^-YS[WdMjBjniU@[{G'IGʩei$ dJ BSMA3g͞3gd`!,ZLX0jH2n1!I%tEXtdate:create2022-03-16T11:53:00+00:00T%tEXtdate:modify2022-03-16T11:53:00+00:00 rtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mu.png000066400000000000000000000006701475545702100261430ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<0PLTE'7'6&=/fmmm13_ CMMWbKGD pHYs''iQtIME 5bKIDAT8c`T`L0 HQF0 La0`7p`K0#F/b_{%tEXtdate:create2022-03-16T11:53:01+00:00)#z%tEXtdate:modify2022-03-16T11:53:01+00:00X~tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mv.png000066400000000000000000000013511475545702100261410ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE4433444/e8q9p9q9:~:}9}8|7}9EQO>=?kɭѝͳHr B~9|8LȫoGNvl@kEl{67dO"TKɭIr BQAbKGD?>c0u pHYs''iQtIME 4;BIDATH0 Ċ b+,n ΄A|LMA3 ĈXHEYaB.IV5MtR2LML އ vZ^7N݉!~?rtGt"%tEXtdate:create2022-03-16T11:52:59+00:00G%tEXtdate:modify2022-03-16T11:52:59+00:00̳<tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mw.png000066400000000000000000000024421475545702100261440ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTE-Fo ^ | j  XO"W ~     t Uk l    v      I6 x  w m a]n r  y   } E T:4/7<Ls     \u  c=1 9H_s  >Qi M.5 Dz ;!( '0   p E@   +   Rgf) ,"*!:y4;!;QcbKGDH pHYs''iQtIME 4:jIDATHc`YXY\<|܂B"f╖W!ŠJʼ*|j2ZZ:zD7052607S47Vt N ;?1CC#"أcbu0A?9HK5;5jL@wdx'dJ&Ezd:NC^fAaQ0Jm2KCP^aZnVP%[]S[ 1qZ2Z<̒m5] .J= x 5QꋈbꯃhQ2T<ىL &NASEzT 3k(d;!w 40ӂ}l`F<v囼s&9sYG @it_aa1a `ԀQK) ( ) +( +)0j ,%tEXtdate:create2022-03-16T11:52:58+00:00%tEXtdate:modify2022-03-16T11:52:58+00:00j7OtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/mx.png000066400000000000000000000023221475545702100261420ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<jPLTEhGgFhHɾ'%&ĥmA^>rֹ{NTk?rB#b=#`H̡ױgcn=W,~J'a;#]1`Iʦ~`9d: oB%rH*xI(wF%ڿͱշ]`3Q0|O/Z6zN+wH$lUռ˼֪nxN+|Q.bJq~[Fo_ǩǝȩS`T1hF+Z8#ͦâŞ˔ɬݽۻlwXIQ0W4o[UzöLnznīѳ⫯㊷f=5itkvsНoϩԯx⨼[ټѶڤޣMĐPۯڻͤé«ԴβѸ̭̳ģbKGDmУE pHYs''iQtIME 5,+IDATHc`L,X+;&`5`ԀQF\!1)9%5D32sr KJHByEeUuMm]}CcSsKka?aSN#3fΚ=g .Zh\lVYnIlݶ}]G^RG;~r3CD5`ԀQf6%tEXtdate:create2022-03-16T11:53:02+00:00˵%tEXtdate:modify2022-03-16T11:53:02+00:00i [tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/my.png000066400000000000000000000036241475545702100261510ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 4;B^IDATh]l33]ڻe5u1Ie4FE۫"RsM墊TRU՛FiVU(* Q$uiib 2^c/^/ Ws|{w//H\Do8JY\ *h. T$µ/k&ijx4ǍLnph$7Dq8A\AP$pAAP6e޽B𴴠jK Go'bOw>5㛦zlN1ϛl3uU3/#k=V@ 9IaZ Oމ "e Ǚ6FE`аl!$Ri>R:s:ylۚ`W~ހe+,lA8hIH/(<4K ׯ$?V+ OO+p*O~ 'n̨:H)0Lz.$۶L1 f Gz,*’LN,N߀?%2ouy-5J">a<4F cg"e g7Qͽ;m<FLEq[G^&c:  ܚ<=ͷw UPMMtufٷs#摯BQPaDAxK=@yw$tR4fu|[5Շ%0S5u6m"+YT,b4'ޒ!-}])ˍ|e#- SPü,8cȯ de^Xbp4BiNwe*o}7ӝSm5F8`HqyBH|+U[X?X aSpg3}x Xow8M2(㋺ @ |k8׆af|LfMQ%?v#D6: y K_KN5AG{Mf&u7g&F#d5>02Gz̖=Ɖ3J,#@0H+_7W t]'ܙ_gx]lMϭW$%.9ƹ1潕cO֠]Rm$:L]ShH!lP5LKEQ$Sy bduGo/2Ս9,[5c|ԟ`8FʥԩWho_sAf|st2:f|^y"gZ  ;[B"qLCQ˒>{k . -tIۖ(0mw}|Li:,FCr=X_2fdL.Ayid1tJ[ڟr2"GL'n%v!:׋Ub6]+ďO@_q{SX>wسO |{^VAV<pO~{q+!2N;k??u;&oͣ_;Sl߰S ihUZ{@f:.O/uΝ1kҤS-/o7a;/buT^ƽVa{@l|ݚֽ/)MPvE[ݥ⯫%>}0 dvS}jYnr;vP(ܹto|ײ;*;4lyt[Q~r93gpJDC+Z-2{/MPۗp׌qm4mi8z[=y5}S܏*m*W|@;Eī"(N9"ֈ,q:5"VAﳕP,A"1f߈xQo# 6rzE\O+j9 |J˼}ed+ihoܴi(q<#,YRB99-2r|ai[E;c%5h*_eC0Ɯ*M`h KW>UǪ87nRL܅yҼ_>4\W:EU/p3FxKq'~,jToH0KVs._@p NT. QzOI0CIqS?ůGk& kSi|{{N;X<=!8j6[[@ voO7|9х[Phw.%gyڽvJLƲYY=>ѣ7nY׀ BbJZԲ.QVV­hr.KW(# EK~BEc=<1Dct^y~<0`KaQxCt؃yb>>Δ/i\<*]Nc̞1{)QI?E cbY>{c#9l4Ry3]~>mQ)Snj BwШ<>.?8\4S[I?8!Pf}i̽w4a:˩߼#GPv ͔/5CV*Hl< 4ޥEQ*Yf ly^\4A՜94ߏb#@< ph5.UN-Wx[ `5jᵌ|]2>IɄ4t~9 h=~rUtC9~ $ծ.!DMpb[mBw2["|p>sG;x^~12NfćNaZgHގZf4Z"9\ Rbosh9tf#szB Y:#s RIt>퍱N!< WlqO?vځ/h EYIfL8C\DW;r̖H&9ծ'.L1 Exi$=IBlvqN\MM>6_|Ȅ į]KĬ8U+^D}ޭ q-lYjsT܆x &&U{hjYL'ϧ/CC^+JL}e9q 6m`=@fs\icDTE큈0s&ToqpeVm֬!q<f6*d T ^ߗn %<ء-[3̖>0[GΘ<`Gr9iy0ƍ;P᪐,ROJRɾM>cGT4|QqU݁&1o(t.^4:5⃳#r/q=|}囩nGxOvXSpШdYd&G{1>ʀ W0l"VD Ru?+'<̻ k*-ŸiWX_;͛_聆|3W,c4|'B>6 MJ|J{; wazE.cĭZ.%t#j8K hffrv":Lgq1u63205aj7.| 5 K fACE3I ҂q.oi23lB V5Ke-t1{=zmV&GlXoS0~t@bx}z:\_MvRx~ uD}@r(NLD0NW^kZZS W4z4ZKSχ5oR='49Y>hdַ¸aiiV&j#5nV9ƎASAzDtvGu5[iڻw{;@:Q `X.=cOz>} !E2Lc,2Aoڄ$ }GR?i\qa;+^/Կ׀@Ƣi̸+P[U=Gx*^ "j| ƤSr=8n?RcuՊyw![`x1tV=ð i\ Sgߩoy|f&e'Ө~Mh=v x9(yC9ʖ/(t=gĭBg0$m`zu/^}P))Vdآti/i (u"=tcϧwxy0eȹs1̤3 JSd|p({ p64g蒒[Kj]yq*H_P#g,Z"!>o 7SPxGǀ3pI=hH +Vd)Z. 0[M/}:%ȇ"~t(oOY{x'3| pD~{b_F2M]? C=b,>n8JPPMPn~7zBqO?M'rrl#+eHj53go@cvˆPrQw#_Ѯsrt=oT[MK >}: m8E8MO}P XtZ#Ur>(zO楞=/ͧ)(?AӡpPk0po~C쓿Mod-GvfMs\O;_/ AHv6?ϐ)SV+sIPШT߹Dy__斮s?%tEXtdate:create2022-03-16T11:53:07+00:00J@%tEXtdate:modify2022-03-16T11:53:07+00:00;"tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/nc.png000066400000000000000000000044361475545702100261260ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5 IDAThlS?]6v'$G ?ȠdJ!@-[ٺ릎*IUiTi(݆uZibPˤ* B)H h~8vΏ;vcHs{= 濪?&#H1-@itByv:+QE 0-0`Ȣ NF(5hBiB".NSs҂V&8!ZxhlDK z6J+sBJ0 L} ۹\ ^A過N8Y/x<^?TENk:(+- $ ?LoW).C1M+0Z.۴ g[`[m6{'Kh!u*/|E,?HGZِpWB4-AU4M{ާޕzJ" h8j6eTWiM+BhM}Qz l8ɪMHqF;s$X_ϊظ|4࣏aͳp,x~c2 6neEKRsG3. *ZhW%߅o-\PY.rDx ʊQU:[/A9( er8!I=g{ޜҲ\+Ԭ7MX =g%thNpzL{^NGPYmSvoH +VP)2\FEN7h,.{n`흰.i:w蹛6DBk`đ,pa+zlr=f%Ζ}=A3Rp}p0>Og&P In⤣wab (uШ>Jyʼnۖڸ3it|ηjfo|ba@C=tg!S[ Z͒8h'l/0.'< t4?p:p6;̔ (u:yhjx ~.듿ڮr-2dS3Pt@Fm&}œ?|n WGY,[ |.eK̔]쎿Bipm ˊrԾ+gAU%xUKС#B$|CI% Qڝ>:7F Tyb%;>v=wRJ_/ڝ9YYFʕDK>o9k6lsp)6s 8>)lv/o9xݚFZԛdC'Yxm;u:GـyCHC[~f3fbNu #1<7B$^bC*][ Ӧ; ?ݚάX9Cus- љ=g{xy.{b?8̩П=aY9LtZ$C@ Iar)-i vb5l7Q_&^AkP{`8t~D"aDxЄh;fCj biI $hEr CFx&lR0c-fva%tEXtdate:create2022-03-16T11:53:09+00:00%tEXtdate:modify2022-03-16T11:53:09+00:00kYtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ne.png000066400000000000000000000012071475545702100261210ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTERPf#f$g$īiKFT OOk*Q~FéT ghIGīiJ*D ) +3bKGD-A= pHYs''iQtIME 5 U9IDATH0EGAVZ(H&5Ƈ盓'4#eq=uX0#, b0YBc5A1Y,U\olH&e_Pݙ, {Tuå7#h/T$EBV-*b ~ae SxioMKNIb)%tEXtdate:create2022-03-16T11:53:10+00:00CP%tEXtdate:modify2022-03-16T11:53:10+00:002tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/nf.png000066400000000000000000000035141475545702100261250ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5  IDAThOl\G?]_:vG6JTi ЖV@RpNp@HHPE JR5qRSLRǎx7^{}7o8CA(/4~͌8bR \y|3nw~ȏ!ߟۇ@6mospqh ld]y[0Ź7֫y0v,6yFR QmO2:/M`u:~7\}+(n(o(764fq @TbDQG-skwiq{ur@iJ\\;\azw\O~ Q7G6@Ht^RJr,qCĂ FQG.fd"3rwre\-K0/هHLU̯yk<(PjUvP,T]e7i5۬Vmq[zW\~[|?{d LI4-S̕owVn_+_;fKi9C$E \Ru6zp]8ۿ}(rdyNNIbwi/O+,LҦݢ*Z㯥wp5lL,v$><-FB$WXXHA>~ǿdV`;6W.0|熿(}~ D$)""JH\GDBQOyt*hƉˏQֈiXt5`kta'EhoKd#R/8>Y#:22k3vWD.2SRel1?#`g|*cq<˖*ts2I2Y -_Wq% @mr·.N5Ļkc}z/ =BD 8D@ `u,^Ǟ"=O~ ӕ Eq,)X͒sɴfQᐳ( $ 9 ~BF GB^X|+T;kSgPm5D."ʢ)P ita^=`*URGlWB8%WxeDgc*G_#CHЛHpQ>Tzf]yK8ҿfRJ~;+AO4EO?.?ODdfۂ~tX}(&4^Orr@hFgw #dzOۀOl ;H%tEXtdate:create2022-03-16T11:53:12+00:00ay%tEXtdate:modify2022-03-16T11:53:12+00:00< tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ng.png000066400000000000000000000005641475545702100261300ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTESRS%׭bKGDaf} pHYs''iQtIME 5 "Ƌ"IDAT8c`Fe8` F*U0`+e2%tEXtdate:create2022-03-16T11:53:11+00:00副%tEXtdate:modify2022-03-16T11:53:11+00:00XtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/ni.png000066400000000000000000000020441475545702100261250ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<PLTEgeyyy᤽Ⱦ֞խɼؕħIJX^]^\X޹L(*,022Tܽ񯹗j9FYbKGDx pHYs''iQtIME 5 U94IDATHc`` H!`` YX+`b`988)a xED(c9((󨪩kha4𘘚[XZ)l! :{xzyHlO`PpHhXxDdO&h'$&%Đn@XFfVvNn^~AaQX:HUTVUn?U[M<: :Md%eZZ;:(›9{z{gg /P(.F($Wac%tEXtdate:create2022-03-16T11:53:10+00:00CP%tEXtdate:modify2022-03-16T11:53:10+00:002tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/nl.png000066400000000000000000000006161475545702100261330ustar00rootroot00000000000000PNG  IHDR@0Sea,gAMA a cHRMz&u0`:pQ<PLTE(&7A;\D!FEisbKGD ٥ pHYs''iQtIME 53IDAT8c` J1B*J B 4` F !ؙ%tEXtdate:create2022-03-16T11:53:08+00:00%tEXtdate:modify2022-03-16T11:53:08+00:00RtEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/no.png000066400000000000000000000010101475545702100261230ustar00rootroot00000000000000PNG  IHDR@0-gAMA a cHRMz&u0`:pQ<^Ղ/FB1^V}}q}u07; Ew@L`Dc =TNyiw ? lZ+ $rGNz4 YtvȜ@ DՠCPN7N[q梇9X׬$ bf[Z00ugz 0BFPH?˱uvO9)*}mFOD"Tuj'Gl,Cm:SClZH<|܆;9 o^yychYX**TWc,)AUE*E.*8fzAglp"S%;i973gfkjHZKUsP{z+& ?Nv#mXf>5 + }G棏q#KGu:aFe)Tjt򮋸!HJ2(ICvZQGu2Vd lFD"22 }bҺ2vQȟ̿q O?}7V]7cNrҷ--@ XR1 #ІS(az!4>Wflڴiw<~W[hc-gj "f'3})E'O{Ru&9uD#_1-B@>x ML0Pi86(: Ey|ҤYa]z:|".Dt: DzzEz1%%P}C^ȖhWüCe CzM ^()) Ћ%9k Ƣ"nE6I_{ŐKeXn$\.=>CB xKbjKeU1>@6 貲ȭIBEVd=!;QЂAHNy%~+ EydkeD{3 $I{:%G냧~UOj=+.u 4:5lks`@e-JlyRBe41h $ŧC !>^ȍ/[XTL@頤ԧ B@d2up 󫩭m 9467uk{tmƨ޾ T/&3L:-xhM֞13qlJjb,Hq?z@fLCR:%tEXtdate:create2022-03-16T11:53:07+00:00J@%tEXtdate:modify2022-03-16T11:53:07+00:00;"tEXtSoftwarewww.inkscape.org<IENDB`onionshare-2.6.3/desktop/onionshare/resources/images/countries/nu.png000066400000000000000000000105161475545702100261440ustar00rootroot00000000000000PNG  IHDR@0K|gAMA a cHRMz&u0`:pQ<bKGDC pHYs''iQtIME 5 "ƋIDAThwtUו$=u *ET22tcDAc;ΤLd$$.1"; J`hQD#{Ԉ%H2^^wι>'&į%zhpGnA|?n@A{M)jnטdM_]T qRhV =s艙lvY@DBp}8B4|$<'Βq}}TG`Jݻ;{2F՞ԝ8;qsf5z83 gg2.#߯>@n!pM4|C P(0jxf2rX^؎ 8&|Woغt"vga#q3x|v*w 2s f5v3^]y,q* G}%h/ Bz ER*aa=yiMq"?NɏDbP`{sbiz1* -I޴ϦT9LCIX4qLg?f^Vr*=*(&@s[xO^c;G"7ΏS*JKGbgN&g4